W3docs

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:

  1. Eine Bedingung, die falsch werden kann. Ein konstantes true läuft ewig.
  2. Etwas im Schleifenrumpf, das die Bedingung verändert. Vergisst man i zu 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 verlassen
  • continue — den Rest der aktuellen Iteration überspringen und die Bedingung erneut prüfen

Beide werden ausführlich in break und continue behandelt.

Ein ausgearbeitetes Beispiel

java— editable, runs on the server

Was kommt als Nächstes

Ein naher Verwandter von while ist die do-while-Schleife, die den Rumpf immer mindestens einmal ausführt.

Übungen

Übung
Wie oft gibt diese Schleife etwas aus? int i = 5; while (i < 5) { System.out.println(i); i++; }
Wie oft gibt diese Schleife etwas aus? int i = 5; while (i < 5) { System.out.println(i); i++; }
Was this page helpful?