Zu den Aufzeichnungen der tutorials.de-Live-Workshops
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
437
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    M4veR1ck M4veR1ck ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    22
    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)
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    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; }
    }
    M4veR1ck bedankt sich. 
    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.

  3. #3
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    190
    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...
    M4veR1ck bedankt sich. 

  4. #4
    Nord-Süd-Richtung Nord-Süd-Richtung ist offline Mitglied Platin
    Registriert seit
    Feb 2008
    Beiträge
    522
    Zitat Zitat von Vereth Beitrag anzeigen
    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; }
    }
    Nette idee, nur leider nichts für 31 32 34 35 37 38...
    M4veR1ck bedankt sich. 
    Napoleon trug rote Kleidung, damit seine Soldaten nicht sahen, dass er verwundet war.
    Die Naz!s trugen braune Hosen ...

  5. #5
    M4veR1ck M4veR1ck ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    22
    Code :
    1
    2
    3
    4
    5
    
                if (("" + i).contains("3")) {
                    System.out.println("MIEP");
                } else {
                    System.out.println(i);
                }
    Das ist super! Kannste mir vllt nur kurz erklären was das mit dem ("" + i) genau aufsich hat?
     

  6. #6
    otis1990 otis1990 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    7
    (""+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
    M4veR1ck bedankt sich. 

  7. #7
    otis1990 otis1990 ist offline Rookie
    Registriert seit
    Mar 2010
    Beiträge
    7
    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
    M4veR1ck bedankt sich. 

  8. #8
    RoCMe RoCMe ist offline Mitglied Gold
    Registriert seit
    Dec 2007
    Beiträge
    190
    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
    Vereth und M4veR1ck bedanken sich. 

  9. #9
    Avatar von HonniCilest
    HonniCilest HonniCilest ist offline Mitglied Brokat
    Registriert seit
    Jun 2009
    Ort
    Java Insel
    Beiträge
    470
    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 ;)
    M4veR1ck bedankt sich. 
    Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
    ...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.

  10. #10
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    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)
    M4veR1ck bedankt sich. 
    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.

  11. #11
    M4veR1ck M4veR1ck ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    22
    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
     

  12. #12
    FrankBooth FrankBooth ist offline Mitglied Gold
    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üße
    Geändert von FrankBooth (11.03.10 um 08:54 Uhr)
    M4veR1ck bedankt sich. 

  13. #13
    M4veR1ck M4veR1ck ist offline Mitglied
    Registriert seit
    Nov 2009
    Beiträge
    22
    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
     

  14. #14
    Avatar von zer0
    zer0 zer0 ist offline Mitglied Brokat
    Registriert seit
    Oct 2009
    Beiträge
    323
    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;
        }
    }
    M4veR1ck bedankt sich. 

  15. #15
    FrankBooth FrankBooth ist offline Mitglied Gold
    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)
    M4veR1ck bedankt sich. 

Ähnliche Themen

  1. Model für Filter? Spiel: Item in "Reichweite"
    Von Nobody im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 3
    Letzter Beitrag: 11.06.09, 20:27
  2. Antworten: 1
    Letzter Beitrag: 31.12.08, 01:05
  3. Spiel + Stoppuhr "zur selben zeit".
    Von Blackhawk50000 im Forum .NET Windows Forms
    Antworten: 6
    Letzter Beitrag: 16.11.07, 10:21
  4. Client Online Spiel "MMORPG"
    Von Lenox im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 07.08.07, 19:51
  5. [Flash5] Brauche Hilfestellung zu "memory spiel"
    Von loserkid im Forum Flash Plattform
    Antworten: 7
    Letzter Beitrag: 12.06.03, 10:27