Java while-Schleife
Code in Java mit der while-Schleife wiederholen, einschließlich Bedingungsprüfung und Endlosschleifen.
Die while-Schleife ist der einfachste Weg, einen Codeblock in Java zu wiederholen. Solange ihre Bedingung true ist, wird der Rumpf erneut ausgeführt. Wird die Bedingung false, endet die Schleife und die Ausführung fährt nach der Schleife fort.
Syntax
while (condition) {
// body — runs while condition is true
}Ein einfaches Beispiel — von 1 bis 5 zählen:
int i = 1;
while (i <= 5) {
System.out.println(i);
i++;
}Die Bedingung i <= 5 wird vor jeder Iteration geprüft. Wenn i den Wert 6 erreicht, ist die Bedingung falsch und die Schleife endet.
Die zwei Dinge, die man sich merken muss
Jede while-Schleife braucht zwei Dinge, um zu enden:
- Eine Bedingung, die falsch werden kann. Ein konstantes
trueläuft ewig. - Etwas im Schleifenrumpf, das die Bedingung verändert. Vergisst man
izu aktualisieren, ist die Schleife endlos.
Ein häufiger Anfängerfehler:
int i = 1;
while (i <= 5) {
System.out.println(i);
// forgot i++ — loop runs forever
}Wenn das Programm hängt, sucht man hier zuerst. Mit Ctrl+C im Terminal stoppt man ein außer Kontrolle geratenes Programm.
Der andere klassische Off-by-one-Fehler ist der Vergleichsoperator. while (i <= 5) mit i beginnend bei 1 läuft fünf Mal; while (i < 5) läuft nur vier Mal. Man entscheidet vor dem Schreiben der Bedingung, ob der Grenzwert eingeschlossen sein soll.
Die Bedingung wird zuerst geprüft
Ist die Bedingung am Anfang falsch, wird der Rumpf überhaupt nicht ausgeführt — nicht einmal einmal:
int i = 10;
while (i < 5) {
System.out.println(i); // never executes
}Das ist der wesentliche Unterschied zur do/while-Schleife, die den Rumpf immer mindestens einmal ausführt.
Wann while die richtige Wahl ist
Eine for-Schleife ist besser, wenn man die Anzahl der Durchläufe im Voraus kennt (for (int i = 0; i < 10; i++)). Eine while-Schleife ist besser, wenn die Abbruchbedingung nicht an einen Zähler gebunden ist — sondern an eine sich ändernde Zustand, und man nicht im Voraus weiß, wie viele Iterationen benötigt werden.
Lesen bis zum Ende der Eingabe:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
while (s.hasNextLine()) {
String line = s.nextLine();
System.out.println("got: " + line);
}Wiederholen bis zum Erfolg:
boolean connected = false;
int attempts = 0;
while (!connected && attempts < 5) {
connected = tryConnect();
attempts++;
}Eine Warteschlange verarbeiten:
while (!queue.isEmpty()) {
Task t = queue.poll();
t.run();
}Endlosschleifen mit Absicht
Manchmal möchte man, dass die Schleife ewig läuft — typischerweise in Event-Loops, Servern oder Simulationen — und man beendet sie mit einem break:
while (true) {
String input = readCommand();
if (input.equals("quit")) {
break;
}
handle(input);
}while (true) ist idiomatischer als while (1 == 1) oder andere Tricks.
break und continue verwenden
Innerhalb jeder Schleife kann man verwenden:
break— die Schleife vollständig verlassencontinue— den Rest der aktuellen Iteration überspringen und die Bedingung erneut prüfen
Beide werden ausführlich in break und continue behandelt.
Ein ausgearbeitetes Beispiel
Was kommt als Nächstes
Ein naher Verwandter von while ist die do-while-Schleife, die den Rumpf immer mindestens einmal ausführt.