-
Hey,
Wir haben von unserer Lehrerin die Aufgabe bekommen das *Miep* spiel zu programmieren...
Dieses Miep spiel geht so das zB die Mitschüler immer eine Zahl sagen (zB. 1,2,3,4... etc), nur das immer wenn eine Zahl durch 3 teilbar ist und es keinen Rest gibt halt, der Mitschüler Miep sagt...
Allerdings soll der Mitschüler auch Miep sagen sobald eine 3 drin vorkommt... also anstatt 23 nen Miep...
Das sollten wir in ein lauffähiges Java-Programm umsetzten...
Ich hab nur keinen Plan wie man das mit der 3 hinkriegt... Das mit dem Miep wenn es eine durch 3 teilbare Zahl ist, ist leicht nur das zweite krieg ich net hin... Wär nett wenn mir dort jemand bei helfen könnt...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
package miep_spiel; import java.io.*; public class Miep_Spiel { public static void main(String[] args) throws IOException{ BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); int zahlen, zahlEnde; String tastatur; System.out.println("Geben sie bitte an, wie bis wan das Programm laufen soll!"); tastatur = eingabe.readLine(); zahlEnde = Integer.parseInt(tastatur); for(zahlen = 1; zahlen <= zahlEnde; zahlen++){ if(zahlen%3 == 0){ System.out.print(" Miep"); } else{ System.out.print(" " + zahlen); } } } }
Bildschirmausgabe folgt:
Code :1 2 3
Geben sie bitte an, wie bis wan das Programm laufen soll! 26 1 2 Miep 4 5 Miep 7 8 Miep 10 11 Miep 13 14 Miep 16 17 Miep 19 20 Miep 22 23 Miep 25 26
Nur soll da jetzt noch die 13 und die 23 raus...Geändert von M4veR1ck (09.03.10 um 16:56 Uhr)
-
Mit dieser kleinen Schleife kannst du testen, ob eine 3 in der Zahl enthalten ist. Dabei wird immer durch 10 geteilt und geprüft, ob die letzte Ziffer eine 3 ist.
Code java:1 2 3 4 5
for ( int z = zahlen; z > 0; z/=10 ) { if ( z%10 == 3 ) { System.out.print(" Miep"); break; } }
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Alternativ kannst du aber auch einen String mit deiner Zahl erzeugen und prüfen, ob dieser die Zahl enthält,.
Etwa so:
Code :1 2 3 4 5
if (("" + i).contains("3")) { System.out.println("MIEP"); } else { System.out.println(i); }
Oder in ganz kurz:
Code :1
System.out.println(("" + i).contains("3") ? "MIEP" : i);
Weil mir gerade langweilig ist, hier die gesamte Abfrage mit ternären Operatoren:
Code :1 2
System.out.println((i % 3 == 0) ? "MIEP" : ("" + i).contains("3") ? "MIEP" : i);Geändert von RoCMe (09.03.10 um 17:59 Uhr) Grund: Langeweile...
-
09.03.10 18:09 #4
- Registriert seit
- Feb 2008
- Beiträge
- 522
Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
Die Naz!s trugen braune Hosen ...
-
Das ist super! Kannste mir vllt nur kurz erklären was das mit dem ("" + i) genau aufsich hat?Code :
1 2 3 4 5
if (("" + i).contains("3")) { System.out.println("MIEP"); } else { System.out.println(i); }
-
(""+i)
damit erzeugst du aus dem i (ich denke es war der datentyp integer gemeint), in dem deine zu überprüfende zahl steckt, einen string und kannst diesen mit ".contains"3""
vergleichen ob eine 3 darin vorkommt.
glg
-
aja die idee mit dem durch 10 teilen würde funktionieren wenn du die zahl durch 10 teilst und das ergebnis und den rest überprüfst ob 3 herauskommt.
ABER: geht nur bis 100
glg
-
Hi!
Da muss ich Vereth's Ansatz aber verteidigen. Die Schleife gibt genau dann ein MIEP aus, wenn die Zahl eine 3 enthält.
Als Beispiel spielen wir das mal mit 31 durch:
1. Durchlauf: z=31;
z%10 ist 1, also ungleich drei, also passiert nix!
vor dem 2. Durchlauf wird z = z/10, also (bei int-Division wird abgerundet)
2.Durchlauf: z= 3;
z%10 ist 3, also => MIEP
das funktioniert genauso mit 131, 113, 111453222 oder jeder anderen beliebigen Zahl, die eine 3 enthält.
Problem dabei ist natürlich, dass du, wenn ein MIEP ausgegeben wurde, die Zahl nicht mehr ausgeben sollst. Du schreibst dir also am besten eine Funktion
boolean contains3(int zahl)
die zunächst nur prüft. Die Ausgabe erfolgt dann außerhalb dieser Methode je nach Resultat.
Aber der Ansatz ist durchaus richtig.
mfg,
RoCMe
-
10.03.10 10:09 #9
Wäre es nicht sauberer statische Methoden wie String.valueOf(i) oder Integer.toString(i) statt (""+i) zu benutzen?
Meiner Meinung nach liest sich das auch weitaus besser und ist für Änfänger besser verständlich.
Edit: Ansonsten, wer mich kennt, weiß, dass ich gerne bei solchen Aufgaben mit Rekursion arbeite. Daher werde ich auch hier einen Vorschlag mit Rekursion bringen, wodurch du keineString-Methoden zur Bearbeitung von "enthaeltDrei" benötigst...
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public boolean enthaeltDrei(int n) { if(n%10==3) return true; else if(n>=10) return enthaeltDrei(n/10); else return false; } //[...] //Fall 1: Zahl ist durch 3 teilbar if(zahl%3==0) System.out.println("Miep"); //Fall 2: Zahl enthält 3 else if(enthaeltDrei(zahl)==true) System.out.println("Miep"); //Fall 3: Zahl enthält keine 3 und ist nicht durch 3 teilbar else System.out.println(zahl); //[...]
Geändert von HonniCilest (10.03.10 um 12:32 Uhr) Grund: Fehler gefunden ;)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
Auch die Lösung mit ""+i ist 'sauber', weil sie sie sich nicht auf unzulässige Voraussetzungen stützt, sondern nur definiertest Verhalten nutzt; durch die Verkettung von String mit int wird die toString()-Methode automatisch zur Konvertierung aufgerufen. Es ist ganz nützlich, sich mit solchen verkürzten Formulierungen vertraut zu machen, weil sie helfen, den Code zu straffen und übersichtlicher zu halten. Es erinnert mich ein wenig an die Frage ob man zusammengesetzte Operatoren wie z.B. += anwenden soll: wenn man erst verstanden hat, was der Ausdruck macht (und das geht schnell), ist es nicht viel schwerer zu lesen als der explizite Aufruf der toString()-Methode. Manche empfinden es sogar als eleganter.
Ich verwende auch manchmal Rekursion, weil es manchmal ein natürliches Verfahren ist, Berechnungen in einer knappen und überschaubaren Weise zu implementieren. Jede Rekursion kann aber durch Iteration ersetzt werden, und in diesem Fall empfinde ich die Realisierung mit einer Schleife als angemessener und intuitiver.
Dennoch: hübsche Idee
Geändert von Vereth (10.03.10 um 18:25 Uhr)
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
Nur blöd ist nur.... Unsere Lehrerin möchte das wir das ohne contains oder anderen speziellen befehlen mach.... Mir würde ja die einfache Methode reichen aber... naja...
Vllt weiß ja einer neh normale Möglichkeit....
Auf jedenfall erstma an alle thx die mir weiter geholfen haben
-
11.03.10 08:43 #12
- Registriert seit
- Sep 2008
- Ort
- Osnabrück (Niedersachsen)
- Beiträge
- 243
Hallo,
was heißt den hier normale Lösung? Also deine Lehrerin scheint an einer "normalen" Lösung ja nicht interessiert zu sein.
Was darf man den und was darf man nicht? Soll es eine mathematische Lösung sein oder was soll es nun werden? Wenn es eine
mathematische Lösung sein muss, geht es doch mit der for-Schleife!
Die Lösung mit String ist die leichteste Lösung und damit für mich normal
GrüßeGeändert von FrankBooth (11.03.10 um 08:54 Uhr)
-
Ja für mich ist die String Lösung auch am besten.... Die will nur das wir das ohne die Methoden wie String etc machen wir sollen das richtig mathematisch machen, also zB. nur mit Modolu... Aber ich hab keine Ahnung wie man das alles machen soll

Ist für mich zu einfach ich brauche komplizierte aufgaben
Damit kann ich besser umgehen als mit solchen einfachen Aufgabenstellungen
-
Nachdem jeder schon etwas gepostet hat, zeich ich auch mal was ich gemacht habe

Hier:
Code JAVA:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
public class MiepSpiel { private static int start = 1; private static int end = 150; public static void main(String[] args) { for (int i = start; i <= end; i++) { if (divisibleByThree(i)) { System.out.println("Miep"); } else if (isContainingAThree(i)) { System.out.println("Miep"); } else { System.out.println(i); } } } // Ist die Zahl durch 3 teilbar? public static boolean divisibleByThree(int n) { if ((n % 3) == 0) { return true; } return false; } // Ist in der Zahl eine 3 enthalten? public static boolean isContainingAThree(int n) { // Zahl in einen String umwandeln String number = Integer.toString(n); // String in ein Char-Array sodass jedes Zeichen einzeln ist char[] numbers = number.toCharArray(); // Array durchlaufen und jedes zeichen überprüfen for (char c : numbers) { // Ist 3 enthalten? if (c == '3') { return true; } } return false; } }
-
11.03.10 09:33 #15
- Registriert seit
- Sep 2008
- Ort
- Osnabrück (Niedersachsen)
- Beiträge
- 243
Also es steht alles da

Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
package miep_spiel; import java.io.*; public class Miep_Spiel { public static void main(String[] args) throws IOException{ BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in)); int zahlen, zahlEnde, zahl; String tastatur; boolean miep = false; System.out.println("Geben sie bitte an, wie bis wann das Programm laufen soll!"); tastatur = eingabe.readLine(); zahlEnde = Integer.parseInt(tastatur); for(zahlen = 1; zahlen <= zahlEnde; zahlen++) { miep = false; if(zahlen%3 == 0){ System.out.print(" Miep"); miep = true; } zahl = zahlen; // muss kopiert werden, da sie verändert wird und bei keinem Miep ausgegeben werden muss while (zahl > 0 && !miep) { if ( zahl%10 == 3 ) { System.out.print(" Miep"); miep = true; } zahl/=10 ; } if (!miep) { System.out.print(" " + zahlen); } } } }
Geändert von FrankBooth (11.03.10 um 09:40 Uhr)
Ähnliche Themen
-
Model für Filter? Spiel: Item in "Reichweite"
Von Nobody im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 3Letzter Beitrag: 11.06.09, 20:27 -
"Wer wird Millionär"-Spiel - Frage bezüglich Überprüfung der Antwort
Von Bandit_profi im Forum .NET Windows FormsAntworten: 1Letzter Beitrag: 31.12.08, 01:05 -
Spiel + Stoppuhr "zur selben zeit".
Von Blackhawk50000 im Forum .NET Windows FormsAntworten: 6Letzter Beitrag: 16.11.07, 10:21 -
Client Online Spiel "MMORPG"
Von Lenox im Forum Sonstige SprachenAntworten: 0Letzter Beitrag: 07.08.07, 19:51 -
[Flash5] Brauche Hilfestellung zu "memory spiel"
Von loserkid im Forum Flash PlattformAntworten: 7Letzter Beitrag: 12.06.03, 10:27



12Danke

Zitieren
Login




