Logikfehler in Schleife?

2b|!2b

Mitglied
Guten Morgen,
ich habe zur Übung ein primitives Programm erstellt, mit dem man eine Pizza aus bestimmten Zutaten zusammenstellen kann. Dabei ging es mir eigentlich darum den Sinn von Abstrakten Klassen zu verstehen, aber jetzt hänge ich anscheinend an einem Logikfehler fest.

Habe eine Klasse Pizza, die die Methode zusammenstellen besitzt. Diese gibt ein Menü aus und fragt in der whileSchleife nach der Auswahl, die der Kunde auf der Pizza haben will. Dann wird abhängig von der Auswahl durch eine switchAnweisung ein Objekt vom Typ-Zutat erzeugt oder die Schleife abgebrochen.

Jetzt soll die Schleife (also die Abfrage) abbrechen,
  • wenn schon 6 Zutaten ausgewählt
  • ODER wenn der Kunde die 5 wählt also "Bestellung abbrechen".
Wenn ich letzteren Fall ausprobiere läuft die Schleife aber immer weiter. Ich habe die logische Variable "isFertig" innerhalb der switchCase-Anweisung im case5 doch auf true gesetzt. Warum bricht die whileSchleife aber nicht ab???


Code:
    public Zutaten[] zusammenstellen(){
        System.out.println("Was wollen sie auf ihre Pizza?");
        System.out.println("===============================");       
        System.out.println("1: Tomate");
        System.out.println("2: Mozzarella");
        System.out.println("3: Schinken");
        System.out.println("4: Thunfisch");
        System.out.println("5: Bestellung fertig");
        System.out.println("===============================");
        Scanner sc = new Scanner(System.in);
       
       
        while(zaehler < 6 || isFertig == false){
            byte auswahl = sc.nextByte();
            switch (auswahl) {
                case 1:
                    belag[zaehler] = new Tomate();
                    zaehler++;
                    break;
                case 2:
                    belag[zaehler] = new Mozzarella();
                    zaehler++;
                    break;
                case 3:
                    belag[zaehler] = new Schinken();
                    zaehler++;
                    break;
                case 4:
                    belag[zaehler] = new Thunfisch();
                    zaehler++;
                    break;
                case 5:
                    System.out.println("Bestellung abgeschlossen.");
                    isFertig = true;
                    break;
                default:
                    System.out.println("Das bieten wir leider nicht an.");
            }
        }
        return belag;
    }

Ich finde meinen Denkfehler einfach nicht. Wäre euch sehr dankbar, wenn ihr euch kurz Zeit für mich nehmen würdet 🙂
 
Der Operator gibt "true" zurück, wenn einer der beiden Ausdrücke true ist! Und da zaehler < 6 weiterhin true bleibt, sofern ich nicht genügend Durchläufe absolviert habe, läuft auch die While Schleife weiter!

Vielen Dank!
 
Habe das jetzt folgendermaßen gelöst:

Code:
    public Zutaten[] zusammenstellen(){
        System.out.println("Was wollen sie auf ihre Pizza?");
        System.out.println("===============================");       
        System.out.println("1: Tomate");
        System.out.println("2: Mozzarella");
        System.out.println("3: Schinken");
        System.out.println("4: Thunfisch");
        System.out.println("5: Bestellung fertig");
        System.out.println("===============================");
        Scanner sc = new Scanner(System.in);
       
       
        while(isFertig == false){
            byte auswahl = sc.nextByte();
            switch (auswahl) {
                case 1:
                    belag[zaehler] = new Tomate();
                    zaehler++;
                    break;
                case 2:
                    belag[zaehler] = new Mozzarella();
                    zaehler++;
                    break;
                case 3:
                    belag[zaehler] = new Schinken();
                    zaehler++;
                    break;
                case 4:
                    belag[zaehler] = new Thunfisch();
                    zaehler++;
                    break;
                case 5:
                    System.out.println("Bestellung abgeschlossen.");
                    isFertig = true;
                    for(int i = zaehler; i < belag.length; i++) {
                        belag[i] = new KeineZut();
                    }
                    break;
                default:
                    System.out.println("Das bieten wir leider nicht an.");
            }
            if(zaehler >= 6){
                isFertig = true;
            }
        }
        return belag;
    }

Im whileSchleifen-Kopf ist nur noch die boolsche Variable vorhanden, die entweder durch die switchCase-Auswahl 5 oder durch erhöhen der zaehler-Variable auf 6 auf true gesetzt wird.
 
Ja. Geht so. Man hätte auch beim vorigen Stand die Schleifenbedingung umformulieren können. Vielleicht hast du ja den sportlichen Ehrgeiz und probierst das auch noch ? 😉😉
 

Zurück
Oben