Methoden Lustige Sieben: Logikfehler?

Hallo zusammen,
ich habe Aufgabe 2.4 vom Anhang bearbeitet und dabei folgenden Code geschrieben:

Java:
//Fehler: z.B. feldziffer=5, Würfelergebnis=3 -> trotzdem 10 verloren

package blatt2_SS16;

import java.util.Scanner;

public class Lustige_Sieben_2_4 extends MiniJava{

    public static void main(String[] args) {
  
    //Anlegen der Variablen:
        int guthaben=100;
        int eingabe=1;
        int wurf1, wurf2, summewürfe;
        int feldziffer=0;
        int einsatz=0, gewinn;
      
      
    //Ausgabe zum Start des Spiels:
        System.out.println("Herzlich willkommen zum Spiel Lustige Sieben!");
        System.out.println("Dein aktuelles Guthaben beträgt: " + guthaben);
        System.out.println("Klicke 0 zum Beenden des Spiels");
  
        Scanner in=new Scanner(System.in);
      
    //Eigentliches Spiel:
        while(eingabe!=0 && guthaben!=0){
          
            //Nutzereingabe:
            System.out.println("Gebe die Ziffer des Feldes ein, auf welches du setzen möchtest.");
                //Gültigkeit überprüfen:
                boolean passt = false ;
                while (! passt ) {
                    feldziffer =in.nextInt();
                    passt=( feldziffer > 1|| feldziffer <13);
                }
            System.out.println("Gebe des Betrag deines Guthabens ein, welchen du auf das Feld setzen möchtest.");
                //Gültigkeit überprüfen:
                passt = false ;
                while (! passt ) {
                    einsatz =in.nextInt();
                    passt=( einsatz<guthaben);
                }
          
            //Würfelwerfen:
            wurf1=dice();
            wurf2=dice();
          
            summewürfe=wurf1 + wurf2;
          
            //Berechnung des neuen Guthabens:
          
            if(wurf1+wurf2==7&&feldziffer==7){
                gewinn=einsatz*3;
            }
            else if(wurf1+wurf2==feldziffer){
                gewinn=einsatz;
            }
          
          
            //linke Längsseite:
            else if(//2:
                    (feldziffer==2 && summewürfe ==(3|4|5|6))
                    //3:
                    ||(feldziffer==3 && summewürfe ==(2|4|5|6))
                    //4:
                    ||(feldziffer==4 && summewürfe ==(2|3|5|6))
                    //5:
                    ||(feldziffer==5 && summewürfe ==(2|3|4|6))
                    //6:
                    ||(feldziffer==6 && summewürfe ==(2|3|4|5))
                    ){
                gewinn=einsatz;
            }
            //Rechte Längsseite:
            else if(//8:
                    (feldziffer==8 && summewürfe ==(9|10|11|12))
                    //9:
                    ||(feldziffer==9 && summewürfe ==(8|10|11|12))
                    //10:
                    ||(feldziffer==10 && summewürfe ==(8|9|11|12))
                    //11:
                    ||(feldziffer==11 && summewürfe ==(8|9|10|12))
                    //12:
                    ||(feldziffer==12 && summewürfe ==(8|9|10|11))
                    ){
                gewinn=einsatz;
            }
            else{
                gewinn=0;
            }
            guthaben=guthaben-einsatz+gewinn;
            //Ausgabe nach jedem Spielzug:
            System.out.println("Das Würfelergebnis ist: " + summewürfe);
            System.out.println("Dein aktuelles Guthaben beträgt: " + guthaben);
//To Do: Gewinn/Verlust ausgeben
            System.out.println("Klicke 0 zum Beenden des Spiels");
        }
    }
}

Die Konsolenausgabe war:

Code:
Herzlich willkommen zum Spiel Lustige Sieben!
Dein aktuelles Guthaben beträgt: 100
Klicke 0 zum Beenden des Spiels
Gebe die Ziffer des Feldes ein, auf welches du setzen möchtest.
5
Gebe des Betrag deines Guthabens ein, welchen du auf das Feld setzen möchtest.
10
Das Würfelergebnis ist: 2
Dein aktuelles Guthaben beträgt: 90
Klicke 0 zum Beenden des Spiels
Gebe die Ziffer des Feldes ein, auf welches du setzen möchtest.
5
Gebe des Betrag deines Guthabens ein, welchen du auf das Feld setzen möchtest.
10
Das Würfelergebnis ist: 3
Dein aktuelles Guthaben beträgt: 80
Klicke 0 zum Beenden des Spiels
Gebe die Ziffer des Feldes ein, auf welches du setzen möchtest.

Eigentlich liegen 5 und 2/3 auf der gleichen Seite und damit dürfte das Guthaben nicht abnehmen. Wieso funktioniert die Logik nicht? Ich finde den Fehler l

Vielen Dank für Eure Hilfe!
Liebe Grüße
 

Anhänge

  • Blatt 2.pdf
    216,6 KB · Aufrufe: 12
Ok danke, könntest du mir erklären, warum man dort z.B. auf 7 kommen würde?

Ich habe es statt | mit || probiert, wobei sich jedoch eine Fehlermeldung ergibt (siehe anbei). Wie müsste ich dies stattdessen formulieren?
 

Anhänge

  • Screenshot Fehlermeldung.JPG
    Screenshot Fehlermeldung.JPG
    77,4 KB · Aufrufe: 40

mrBrown

Super-Moderator
Mitarbeiter
Ok danke, könntest du mir erklären, warum man dort z.B. auf 7 kommen würde?
3 ist binär 0001
4 ist 0100
5 ist 0101
6 ist 0110
Das ganze logisch verodert (da wo in einem eine 1 steht, steht im Ergebiss eine 1) ergibt 0111, was 7 entspricht.
Führende Nullen mal weggelassen

Ich habe es statt | mit || probiert, wobei sich jedoch eine Fehlermeldung ergibt (siehe anbei). Wie müsste ich dies stattdessen formulieren?
|| ist ein logisches Oder, was sich nur auf booleans anwenden lässt.
Du müsstest jeden Wert einzeln prüfen.
 

Javinner

Top Contributor
Dein Code ist ziemlich unaufgeräumt. An deiner Stelle hätte ich eigene Klasse für Spieler,
Spielfeld etc. erstellt oder zumindest die Bedingungen ausgelagert.

Paar Anregungen:
Java:
//Würfelwerfen:
        wurf1 = dice();
        wurf2 = dice();
        summewürfe = wurf1 + wurf2;
        //Besser waere es:
        summewürfe = dice() + dice();
        //Umlaute sollten vermieden werden
        //Noch besser waere es:
        summewuerfe = dice() + dice();

Java:
else if(//2:
                    (feldziffer==2 && summewürfe ==(3|4|5|6))
                    //3:
                    ||(feldziffer==3 && summewürfe ==(2|4|5|6))
                    //4:
                    ||(feldziffer==4 && summewürfe ==(2|3|5|6))
                    //5:
                    ||(feldziffer==5 && summewürfe ==(2|3|4|6))
                    //6:
                    ||(feldziffer==6 && summewürfe ==(2|3|4|5))
                    ){
                gewinn=einsatz;
            }
Java:
private final int aGrenzeKlein = 2;
private final int aGrenzeGross = 6;

private boolean istVonZweiBisSechs(int augenzahl, int wunschzahl)
    {
        return
                ((augenzahl >= aGrenzeKlein && augenzahl <= aGrenzeGross)
                &&
                (wunschzahl >= aGrenzeKlein && wunschzahl <= aGrenzeGross));
    }
Java:
public boolean istEinfach(int augenzahl, int wunschzahl)
    {
        boolean a = istVonZweiBisSechs(augenzahl, wunschzahl);
        boolean b = istVonAchtBisZwoelf(augenzahl, wunschzahl);
        return ((a && !b)||(b && !a));
    }
Java:
//An einer Stelle fuer alle aendern
private final int sieben = 7;
//Wahr-Bedingung
public boolean istDreifach(int augenzahl, int wunschzahl)
    {
        return augenzahl == sieben && wunschzahl == sieben;

    }
Java:
//Info: sf = SpielFeld
if (sf.istDreifach(augenzahl, wunschzahl)) {
                //Dreifach
                spielsumme += spieleinsazt * sf.DREIFACH;
                drucker.infoZwischenStandGewonnen(spielsumme, spieleinsazt * sf.DREIFACH);
            } else if(...) {
Java:
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
3//Feldzahl
Ihr Spieleisatz bitte
50//Spieleinsatz
Ihrem Guthaben wurde die Summe 50 gutgeschrieben. Gratulation! Ihr aktuelles Guthaben beträgt 150
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
0 //Abbruch
Vielen Dank für Ihren Besuch! Sie haben Heute 50 EUR gewonnen Bitte beehren Sie uns bald wieder!
und so weiter.
Es fehlen paar Abbruchbedingungen wie: "Was soll passieren, wenn der Spieleinsatz die max. mögliche Summe übersteigt?" und wenn dies zutrifft, wie dann weiter verfahren werden soll.

An sich aber eine echt gute Übung, vielen Dank!, hat Spaß gemacht!
 
Zuletzt bearbeitet:

Javinner

Top Contributor
Hallo an alle,

habe Gestern die Aufgabe programmiert und bin dabei an ein Problem gestoßen,
welches ich nicht nachvollziehen kann.

Problembeschreibung:
- es soll getestet werden, ob die Zahl innerhalb eines Zahlenbereiches liegt.
Java:
package test;
public class Test
{

    /**
     * Zahlengrenzbereich;
     */
    static int aGrenzeKlein = 2;
    static int bGrenzeGross = 12;

    public static void main(String[] args)
    {
        //Zahleingabe
        int wunschzahl = 1;
        //Wenn wunchzahl ausserhalb des Zahlenbereiches, dann
        if (istAusserhalbZahlenBereich(wunschzahl)) {
            //Zu Testzwecken
            //Drucke
            System.out.println("Ausserhalb");
        }
    }

    /**
     * testet, ob die {@code wunschzahl} ausserhalb des Zahlenbereiches liegt;
     *
     * @return true wenn {@code wunschzahl} innerhalb des Zahlenbereiches;
     */
    static boolean istAusserhalbZahlenBereich(int wunschzahl)
    {
        return wunschzahl < aGrenzeKlein && wunschzahl > bGrenzeGross;
    }
}

Es passiert aber nichts. Wenn ich boolean istAusserhalbZahlenBereich(int zahl)
negiere, dann gibt das System die Meldung "Ausserhalb" auch dann aus, wenn ich im
Zahlenbereich bin..
Bin verwirrt, was übersehe ich?
 

Javinner

Top Contributor
Java:
*********************************************
Herzlich Willkommen in unserem Spielkasino
Sie können das Spiel mit '0' abbrechen
Zum Spielen bitte eine '1' tippen
*********************************************
1
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 93 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 86 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 79 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 72 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 65 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 58 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 51 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 44 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 37 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 30 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 23 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 16 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 9 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Sie haben Ihr Einsatz in Höhe von 7  EUR leider verloren! Ihr aktuelles Guthaben beträgt 2 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein 
Sie können das Spiel mit '0' abbrechen
7
Ihr Spieleisatz bitte
7
Ihr aktuelles Guthaben beträgt 2  EUR Ihr maxium liegt bei 2 EUR
Sie können das Spiel mit '0' abbrechen
oder Ihr Spieleisatz bitte
2
Sie haben Ihr Einsatz in Höhe von 2  EUR leider verloren! Ihr aktuelles Guthaben beträgt 0 EUR
Vielen Dank für Ihren Besuch! Sie haben Heute 100 EUR verloren Bitte beehren Sie uns bald wieder!
Java:
*********************************************
Herzlich Willkommen in unserem Spielkasino
Sie können das Spiel mit '0' abbrechen
Zum Spielen bitte eine '1' tippen
*********************************************
0
Vielen Dank für Ihren Besuch! Sie haben Heute nichts gewonnen Bitte beehren Sie uns bald wieder!
Java:
*********************************************
Herzlich Willkommen in unserem Spielkasino
Sie können das Spiel mit '0' abbrechen
Zum Spielen bitte eine '1' tippen
*********************************************
1
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
1
Die Zahl 1 ist außerhalb des Zahlenbereiches
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
13
Die Zahl 13 ist außerhalb des Zahlenbereiches
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
12
Ihr Spieleisatz bitte
40
Sie haben Ihr Einsatz in Höhe von 40  EUR leider verloren! Ihr aktuelles Guthaben beträgt 60 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
4
Ihr Spieleisatz bitte
65
Ihr aktuelles Guthaben beträgt 60  EUR Ihr maxium liegt bei 60 EUR
Sie können das Spiel mit '0' abbrechen
oder Ihr Spieleisatz bitte
60
Sie haben Ihr Einsatz in Höhe von 60  EUR leider verloren! Ihr aktuelles Guthaben beträgt 0 EUR
Vielen Dank für Ihren Besuch! Sie haben Heute 100 EUR verloren Bitte beehren Sie uns bald wieder!
Java:
*********************************************
Herzlich Willkommen in unserem Spielkasino
Sie können das Spiel mit '0' abbrechen
Zum Spielen bitte eine '1' tippen
*********************************************
1
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
3
Ihr Spieleisatz bitte
59
Ihrem Guthaben wurde die Summe 59 EUR gutgeschrieben. Gratulation! Ihr aktuelles Guthaben beträgt 159 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
0
Vielen Dank für Ihren Besuch! Sie haben Heute 59 EUR gewonnen Bitte beehren Sie uns bald wieder!
Java:
*********************************************
Herzlich Willkommen in unserem Spielkasino
Sie können das Spiel mit '0' abbrechen
Zum Spielen bitte eine '1' tippen
*********************************************
1
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
10
Ihr Spieleisatz bitte
44
Ihrem Guthaben wurde die Summe 44 EUR gutgeschrieben. Gratulation! Ihr aktuelles Guthaben beträgt 144 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
5
Ihr Spieleisatz bitte
50
Sie haben Ihr Einsatz in Höhe von 50  EUR leider verloren! Ihr aktuelles Guthaben beträgt 94 EUR
Geben Sie eine Wunschzahl zwischen 2 und 12 ein
Sie können das Spiel mit '0' abbrechen
0
Vielen Dank für Ihren Besuch! Sie haben Heute 6 EUR verloren Bitte beehren Sie uns bald wieder!

 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben