Würfelspiel Mäxchen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Würfelspiel Mäxchen

    Hey leute hab hier mal ein Würfelspiel namens Mäxchen programmiert die regeln sind folgende:

    1. Man Würfelt mit 2 Würfeln
    2. bei einer 1 und einer 2 hat man ein Mäxchen geworfen dieser Wurf ist 1000 Punkte wert
    3. bei gleicher Augenzahl z.B. 3 und 3 ist das ein Pasch und ist 100 * Augezenzahl wert das bedeutet z.B. 3 und 3 = 300 Punkte
    4. bei 2 Unterschiedlichen Augenzahlen wirt die größere Augenzahl *10 genommen + die kleinere heißt z.b 2 und 3 = 32

    mein programm berechnet nun die Punkte für die jeweiligen Würfe der Code dazu sieht so aus:


    Quellcode

    1. public static void main(String[] args)
    2. {
    3. int Augenzahl = Console.readInt("Bitte geben Sie die 1. Würfelzahl ein ");
    4. int Augenzahl2 = Console.readInt("Bitte geben Sie die 2. Würfelzahl ein");
    5. if((Augenzahl==2) || (Augenzahl==1) && (Augenzahl2==1) || (Augenzahl2==2))
    6. {
    7. System.out.println("1000");
    8. }
    9. {
    10. if ((Augenzahl==Augenzahl2))
    11. {
    12. System.out.println(Augenzahl *100);
    13. }
    14. }
    15. {
    16. if ((Augenzahl>Augenzahl2))
    17. {
    18. System.out.println((10*Augenzahl) + Augenzahl2);
    19. }
    20. else
    21. {
    22. System.out.println((10*Augenzahl2) + Augenzahl);
    23. }
    24. }
    25. }
    Alles anzeigen


    So nun ne Kleine Frage :

    Wenn man nun die Würfe Eingibt passiert folgendes

    Bitte geben Sie die 1. Würfelzahl ein
    1
    Bitte geben Sie die 2. Würfelzahl ein
    2
    1000
    21 // warum wird Hier die 21 Ausgegeben genau das gleich passiert auch bei einem Pasch sehe ich das richtig und er führt jedes mal die letzte if anweißung aus in der es heißt 10 größte Augenzahl + kleinste ?
    // was tu ich dagegen ????

    Habe nun mal die letzte If-Anweisung noch etwas erweitert wie folgt :

    Quellcode

    1. if ((Augenzahl>Augenzahl2)&& (Augenzahl!=2) || (Augenzahl!=1) && (Augenzahl2!=1) || (Augenzahl2!=2)&&(Augenzahl!=Augenzahl2))


    aber trotzdem immer noch das selbe Ergebniss .....
    Könnte auch an der Klammersetzung liegen aber da habe ich auch schon alle möglichen und abstrusen formationen probiert ohne Erfolg....:(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Torben Brodt () aus folgendem Grund: bitte syntax tags benutzen

  • und er führt jedes mal die letzte if anweißung aus in der es heißt 10 größte Augenzahl + kleinste ?
    genau so ist es. Auch wenn du einen "treffer" gelandet hast (also z.B. hast du in der ersten if-abfrage herausgefunden, dass es ein Mäxle ist) werden die anderen if abfragen trotzdem noch ausgeführt. Und logischerweise ist bei einem Mäxle die eine Augenzahl größer als die andere.
    Am einfachsten kannst du das Problem beheben, wenn du statt einzelnen if-Abfragen ein großes
    if - else if - else if - else if - else Konstrukt benutzt. In dem Falle führt er die anderen if-Abfragen dann nicht mehr aus, sobald er ein "passendes" gefunden hat.
    Ein Beispiel gibts hier (letztes Beispiel)
  • Danke für eure Hilfe !

    Habe nun die Fehler verbessert jetzt funzt alles und sieht so aus :

    Quellcode

    1. public static void main(String[] args)
    2. {
    3. int Augenzahl = Console.readInt("Bitte geben Sie die 1. Würfelzahl ein ");
    4. int Augenzahl2 = Console.readInt("Bitte geben Sie die 2. Würfelzahl ein");
    5. if((Augenzahl==2) || (Augenzahl==1) ^ (Augenzahl2==1) || (Augenzahl2==2)) // Statt logisches && und hier XOR
    6. {
    7. System.out.println("1000");
    8. }
    9. else if ((Augenzahl==Augenzahl2))
    10. {
    11. System.out.println(Augenzahl *100);
    12. }
    13. else if ((Augenzahl>Augenzahl2))
    14. {
    15. System.out.println((10*Augenzahl) + Augenzahl2);
    16. }
    17. else if ((Augenzahl2 > Augenzahl))
    18. {
    19. System.out.println((10*Augenzahl2) + Augenzahl);
    20. }
    21. }
    Alles anzeigen
  • Das mit der 3 hätte ich auch vorgeschlagen, das klappt aber nur "zufällig" (weil es sich um die beiden kleinsten aufeinanderfolgenden Zahlen handelt). Generell kann man sich aber das || mit Math.min() & Math.max() sparen, über Sinnhaftigkeit lässt sich aber streiten.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]