• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Kann eine while-Schleife ein Programm blockieren?

H

Hallo1234

Mitglied
Hallo, bei folgendem Code soll der Benutzer eine Zahl erraten, die sich der Computer "ausgedacht" hat. Zusätzlich soll es drei Schwierigkeitsgrade geben.
Ich glaube das die while-Schleife für diesen Teil des Codes das komplette Programm blockiert, denn wenn ich sie auskommentiere, habe ich so viele Versuche wie ich will, wenn ich sie wieder einfüge, habe ich nur einen Versuch, die Zahl zu erraten, danach geht nichts mehr. Vielleicht ist es auch ein Denkfehler. Vielen Dank für eure Hilfe.

Java:
public static void main(String[] args) {

    int wertebereich = 100;  //Die "ausgedachte" Zahl kann von 0 bis 100 gehen.

        errateZahl(wertebereich);   

    }

    

    public static int errateZahl(int wertebereich) {

        Scanner s = new Scanner(System.in);

        int zufallsZahl = (int) (Math.random() * wertebereich);

        System.out.println(zufallsZahl);  //Zum überprüfen gebe ich sie jedes Mal mit aus.

        

        System.out.println("Welchen Schwierigkeitsgrad möchten Sie spielen? (leicht, mittel, schwer): ");

        String grad = s.next();

        System.out.println("Geben Sie Ihre Zahl ein: ");

        int rateZahl = s.nextInt();

        

        int i = 1;

        boolean quit = false;

        while(rateZahl!=zufallsZahl) {  //Diese Schleife überprüft, ob man die Zahl schon erraten hat.

            

        if(rateZahl<zufallsZahl) {

            System.out.println("Die Zahl "+rateZahl+" war zu klein. Versuchen Sie es noch mal: ");

        }else if(rateZahl>zufallsZahl) {

            System.out.println("Die Zahl "+rateZahl+" zu groß. Versuchen Sie es noch mal.");

        }

        rateZahl = s.nextInt();  //Falls man die Zahl nicht erraten hat, kommt hier der nächste Versuch.

        i++;

        

        while(quit == false) {  //Diese Schleife ist das Problem. Wenn ich sie raus nehme, klappt alles wie vorher, ich habe unbegrenzte Versuche. Ist sie drin, kann ich nur                                                ein mal raten. Es kommt dann nicht einmal die Meldung "Sie haben die Anzahl von Versuchen überschritten".

            

        if(grad.equals("leicht")&& i>20) {

            quit = true;

            System.out.println("Sie haben die Anzahl von Versuchen überschritten.");

        }else if(grad.equals("mittel")&& i>15) {

            quit = true;

            System.out.println("Sie haben die Anzahl von Versuchen überschritten.");

        }else if(grad.equals("schwer")&& i>10) {

            quit = true;

            System.out.println("Sie haben die Anzahl von Versuchen überschritten.");

        }   

    }

        

}

        System.out.println("***ERRATEN*** Herzlichen Glühstrumpf!!! Sie haben "+ i+ " Versuche gebraucht.");

        

        return zufallsZahl;

    }

}
 
H

httpdigest

Top Contributor
Soetwas findet man ganz exzellent mit einem Debugger (Teil einer jeden Java IDE) heraus. Schau dir mal ganz genau die Schleife an:
Java:
while (quit == false) {
  if (grad.equals("leicht") && i > 20) {
    quit = true;
    System.out.println("Sie haben die Anzahl von Versuchen überschritten.");
  } else if (grad.equals("mittel") && i > 15) {
    quit = true;
    System.out.println("Sie haben die Anzahl von Versuchen überschritten.");
  } else if (grad.equals("schwer") && i > 10) {
    quit = true;
    System.out.println("Sie haben die Anzahl von Versuchen überschritten.");
  }
}
Dies ist deine Endlosschleife, weil es sehr viele Wege durch diese Schleife gibt, die nicht dafür sorgen, dass quit = true wird.
Es wird also keiner der drei if-else-if-Fälle betreten, somit ändert sich nichts an der Bedingung der Schleife und somit macht sie unendlich lange weiter.
 
H

Hallo1234

Mitglied
Erstmal vielen Dank für die schnelle Antwort😄. Ich denke ein "i > 20 && i <22" würden das Problem beheben, oder. Gilt natürlich für alle drei Fälle. Das probiere ich gleich aus.
 
H

httpdigest

Top Contributor
Ich denke ein "i > 20 && i <22" würden das Problem beheben, oder. Gilt natürlich für alle drei Fälle.
Also ungeachtet dessen, dass diese Bedingung völlig willkürlich ist und dasselbe ist wie `i == 21`: Nein, würde es nicht.
Ich frage mich, warum du da überhaupt eine Schleife verwendest.
 
H

Hallo1234

Mitglied
Hmm..., hast Recht! Erlich gesagt, wüsste ich nicht, wie ich es sonst machen könnte. Ich programmiere noch nicht lange, merkt man. Was wäre denn dein Lösungsweg?

Edit: jetzt fällt mir auf, ich habe bei der Schleife das i++ und oben das i vergessen🤦‍♂️
Edit2: ändert nichts...
screenshot für java forum.png
 
Zuletzt bearbeitet:
D

DerEarl

Mitglied
Abend!
Versuch mal die zweite Schleife weg zu lassen. Außerdem hab ich fürs Beispiel einen Switch-Block verwendet... geht natürlich auch mit
if / else if /else...

LG


Java:
public static void main(String[] args) {
        int wertebereich = 100;
        errateZahl(wertebereich);   
    }

        
    @SuppressWarnings("resource")
    public static int errateZahl(int wertebereich) {
        Scanner s = new Scanner(System.in);
        int zufallsZahl = (int) (Math.random() * wertebereich);
        System.out.println(zufallsZahl);
        System.out.println("Welchen Schwierigkeitsgrad möchten Sie spielen? (leicht, mittel, schwer): "); 
        String grad = s.next();
        int max = 0;
        switch (grad) {
        case "leicht":{
            max = 20;
            break;
        }
        case "mittel":{
            max = 15;
            break;
        }
        case "schwer":{
            max = 10;
            break;
        }
        default:
            System.out.println("Ungültige Eingabe: " + grad);
            return zufallsZahl;
        }
        int rateZahl = 0;
        int sMax = max;
        while(max > 0) {
            System.out.println("Geben Sie Ihre Zahl ein: ");
            rateZahl = s.nextInt();
            max--;
            if(max <= 0) {
                System.out.println("traurig schon alle Versuche von " + sMax + " weg :(");
                break;
            }
            if(rateZahl<zufallsZahl) {
                System.out.println("Die Zahl "+rateZahl+" war zu klein. Versuchen Sie es noch mal: ");
            }
            if(rateZahl>zufallsZahl) {
                System.out.println("Die Zahl "+rateZahl+" zu groß. Versuchen Sie es noch mal.");
            }
            if(rateZahl == zufallsZahl) {
                System.out.println("***ERRATEN*** Herzlichen Glühstrumpf!!! Sie haben "+ (sMax-max) + " Versuche gebraucht.");
                break;
            } 
        } 
        return zufallsZahl;
    }
 
Zuletzt bearbeitet:
H

Hallo1234

Mitglied
Morgen! Vielen Dank für deine Antwort😄. Ich werde das ganze mal mit if/else Verweigungen ausprobieren, weil mir Switch-Blöcke noch nicht so bekannt sind.
 
H

Hallo1234

Mitglied
Habe jetzt die while-Schleife raus genommen. Es klappt, allerdings bricht das Programm nicht ab, nachdem die Anzahl der Versuche überschritten wurde, was ich ja mit der Schleife errichen wollte. Gibt es da noch eine Möglichkeit, die Anfänger freundlich ist?
 
D

DerEarl

Mitglied
Wie meinst du das? Bis auf den Switch-Block und das @SuppressWarnings hielt ich meinen Code für ziemlich anfängerfreundlich...
Ich weiß nicht ob du jetzt etwas von mit übernommen hast oder nicht ich empfehle dir jedenfalls die Versuche immer zu verringern
(also --) und in die while genau diese Bedingung rein zu schreiben und nicht einfach ein boolean
Also...
Java:
    int versuche = 10
    while(versuche > 0){
        versuche--;
        //Dein Code
    }
    //Alle Versuche durchgelaufen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Wie schaffe ich das eine while Schleife addiert danach subtrahirt? Java Basics - Anfänger-Themen 1
J Wie kann ich hier eine While schleife einbauen? Java Basics - Anfänger-Themen 3
mor16Euro Erste Schritte Wie nennt man eine While oder For schleife die nie Ausgeführt wird Java Basics - Anfänger-Themen 5
G jedem while element eine maximale rechenzeit zusichern Java Basics - Anfänger-Themen 16
F Wann ist es eine Instanz und wann nicht? Java Basics - Anfänger-Themen 1
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
O zweidimensionales array in eine csv-Datei Java Basics - Anfänger-Themen 1
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
Y Einfügen in eine doppelt verkettete Liste Java Basics - Anfänger-Themen 8
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
Tino1993 for-Schleife, die eine vorgegebene Anzahl von Zeichen ausgibt Java Basics - Anfänger-Themen 3
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
jonny_2k12 Wie kann ich eine ArrayList aus einer Klasse in eine andere übergeben? Java Basics - Anfänger-Themen 21
S Eine Liste kopieren Java Basics - Anfänger-Themen 13
A eine neue normale String-Array von einer String-Array, die in for schleife ist, schaffen Java Basics - Anfänger-Themen 3
java3690 eine liste sortieren Java Basics - Anfänger-Themen 12
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
P Was genau bringt mir es ein Array in eine Liste zu bringen Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
I Wo am besten eine String Konstante initialisieren? Java Basics - Anfänger-Themen 5
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
Y Methoden Wie kann ich eine if-Abfrage bei Setters bauen? Java Basics - Anfänger-Themen 6
I Sortiert eine HashMap nicht gleich wie eine ArrayList? Java Basics - Anfänger-Themen 1
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
C Methoden Java ist auch eine Insel Listing 2.40 Recursion Java Basics - Anfänger-Themen 7
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
P Eine komplizierte Sache Java Basics - Anfänger-Themen 1
B Nur eine bestimmte Anzahl an Arrays ausgeben Java Basics - Anfänger-Themen 9
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
T Wie eine Komposition garantieren Java Basics - Anfänger-Themen 5
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B Von Array nur eine bestimmte Anzahl bekommen Java Basics - Anfänger-Themen 3
C "HelloWorld" - Dateien erstellt, aber ist es eine class-Datei? Java Basics - Anfänger-Themen 2
L Muss eine HttpURLConnection geschlossen werden? Java Basics - Anfänger-Themen 2
D OOP- Eine Klasse in mehrere Klassen aufteilen Java Basics - Anfänger-Themen 7
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
P Alles eine Typfrage Java Basics - Anfänger-Themen 7
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
D Guten Tag mache gerade eine Umschulung zum FiSi war leider jetzt 2 Wochen Krank und wir hatten Prozendurale Programmierung. Java Basics - Anfänger-Themen 3
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
W Zwei Programme sollen auf eine Klasse zugreifen Java Basics - Anfänger-Themen 18
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
L Klassen Wie “installiert” man eine Klasse? Java Basics - Anfänger-Themen 2
E Datentypen Einfügen von Objekten in eine Map Java Basics - Anfänger-Themen 2
X Wo steht, ob eine Datei big, little oder bi-endian codiert ist? Java Basics - Anfänger-Themen 3
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
O Iterator für eine geordnete Menge Java Basics - Anfänger-Themen 134
J Lesen und schreiben in eine Datei(Anfänger- Dateizugriffe) Java Basics - Anfänger-Themen 3
M Wie lang eine Funktion/Methode? Java Basics - Anfänger-Themen 51
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
D Richtig Vorbereiten auf eine Programmier Klausur Studium. Java Basics - Anfänger-Themen 7
A Eine Krone in der Textausgabe - Mein Code Java Basics - Anfänger-Themen 11
scratchy1 Kann man in einer Methode eine andere aufrufen? Java Basics - Anfänger-Themen 2
B CSS Klassen in eine Liste schreiben Java Basics - Anfänger-Themen 4
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
scratchy1 Wie deklariert man eine Methode, die ein Objekt zurückgeben soll? Java Basics - Anfänger-Themen 22
B Wie kann man an ein JPanel eine Scrollbar anheften? Java Basics - Anfänger-Themen 8
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Bedingter Operator eine Frage! Java Basics - Anfänger-Themen 10
C Methoden Über eine einfach verkettete Liste Java Basics - Anfänger-Themen 8
J Eine Liste von Listen erstellen Java Basics - Anfänger-Themen 11
A Wie gebe ich bei android eine string im programm aus? Java Basics - Anfänger-Themen 4
R Auf eine Stelle [i] des Arrays zugreifen Java Basics - Anfänger-Themen 7
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
V Compiler-Fehler Warum eine IndexOutOfBoundsException? Java Basics - Anfänger-Themen 3
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
B Kann man eine Tabelle in Eclipse erzeugen und damit arbeiten? Java Basics - Anfänger-Themen 8
I Wie benutzt man eine Klasse? Java Basics - Anfänger-Themen 13
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
F Aus geraden eine Kurve machen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Anzeige

Neue Themen


Oben