In Java brauchst du Schleifen immer dann, wenn eine Aufgabe nicht nur einmal, sondern mehrfach ausgeführt werden soll. Technisch lösen Schleifen das Problem, dass du denselben Code nicht kopieren und wiederholen musst. Fachlich bedeuten sie meistens: Gehe eine Menge von Dingen durch, warte auf einen Zustand, wiederhole eine Prüfung oder führe eine Aktion so lange aus, bis ein Ziel erreicht ist.
Ohne Schleifen würdest du schnell sehr unflexiblen Code schreiben. Stell dir vor, du willst fünf Benutzernamen ausgeben. Das könntest du zwar mit fünf einzelnen System.out.println Anweisungen machen, aber schon bei zehn, hundert oder tausend Einträgen ist klar, dass das nicht sinnvoll ist. Eine Schleife beschreibt nicht jede Wiederholung einzeln, sondern die Regel dahinter.
String[] usernames = {"anna", "ben", "clara"};
for (String username : usernames) {
System.out.println(username);
}
Der Code sagt nicht: Gib zuerst Anna aus, dann Ben, dann Clara. Er sagt: Gehe durch alle Benutzernamen und gib jeden einzelnen aus. Genau das ist der wichtigste Gedanke bei Schleifen. Du beschreibst ein Muster, nicht jeden Einzelschritt.
Eine Schleife besteht fast immer aus drei Fragen. Wann startet sie? Wie lange läuft sie? Was passiert pro Durchlauf? Wenn du diese drei Fragen sauber beantworten kannst, wird die Wahl der passenden Schleife deutlich einfacher.
In Java gibt es vor allem while, do while, die klassische for Schleife und die erweiterte for Schleife, die oft auch for-each genannt wird. Alle können Code mehrfach ausführen, aber sie drücken unterschiedliche Absichten aus. Genau diese Absicht ist wichtig, damit dein Code später verständlich bleibt.
while und do while: wenn der Zustand entscheidet
Eine while Schleife verwendest du, wenn nicht die Anzahl der Durchläufe im Vordergrund steht, sondern eine Bedingung. Sie läuft, solange diese Bedingung true ist. Vor jedem Durchlauf wird geprüft, ob weitergemacht werden darf.
int remainingAttempts = 3;
boolean loggedIn = false;
while (!loggedIn && remainingAttempts > 0) {
remainingAttempts--;
loggedIn = checkLogin();
}
Fachlich liest sich das so: Solange der Benutzer noch nicht angemeldet ist und noch Versuche übrig sind, wird ein Login geprüft. Die Schleife beschreibt also keinen festen Zähler, sondern einen Zustand im System. Genau dafür ist while gut geeignet.
Wichtig ist, dass sich innerhalb der Schleife etwas ändern muss, das die Bedingung beeinflusst. Im Beispiel wird remainingAttempts kleiner und loggedIn kann auf true wechseln. Wenn sich die Bedingung nie verändert, entsteht eine Endlosschleife. Das ist einer der häufigsten Fehler beim Arbeiten mit while.
Eine do while Schleife ist ähnlich, hat aber einen entscheidenden Unterschied. Sie prüft die Bedingung erst nach dem ersten Durchlauf. Der Code im Schleifenrumpf wird also mindestens einmal ausgeführt.
String input;
do {
input = readCommand();
handleCommand(input);
} while (!input.equals("exit"));
Das passt fachlich gut, wenn zuerst etwas passieren muss, bevor überhaupt entschieden werden kann, ob wiederholt wird. Ein typisches Beispiel ist eine einfache Kommandoeingabe. Du liest zuerst einen Befehl ein und entscheidest danach, ob weitergelesen wird.
In normalem Java Code ist do while seltener als while, aber sie ist nicht überflüssig. Sie ist sinnvoll, wenn ein Ablauf garantiert mindestens einmal stattfinden muss. Wenn diese Garantie fachlich nicht stimmt, ist while meistens die klarere Wahl.
for und for-each: wenn du gezielt über Bereiche oder Daten gehst
Die klassische for Schleife verwendest du, wenn du mit einem Zähler arbeitest oder bewusst über einen bestimmten Bereich laufen willst. Sie bündelt Startwert, Bedingung und Veränderung des Zählers an einer Stelle.
for (int i = 0; i < 5; i++) {
System.out.println("Versuch " + (i + 1));
}
Technisch läuft diese Schleife fünfmal. Fachlich steht dahinter: Führe eine Aktion für eine definierte Anzahl von Versuchen aus. Das ist gut lesbar, weil direkt im Schleifenkopf steht, wo gestartet wird, wann Schluss ist und wie der Zähler verändert wird.
Die klassische for Schleife ist auch dann sinnvoll, wenn du den Index brauchst. Das kommt zum Beispiel vor, wenn du Positionen ausgeben, Nachbarelemente vergleichen oder gezielt auf ein Element an einer bestimmten Stelle zugreifen willst.
List<String> names = List.of("Anna", "Ben", "Clara");
for (int i = 0; i < names.size(); i++) {
System.out.println((i + 1) + ": " + names.get(i));
}
Hier ist der Index fachlich relevant, weil die Ausgabe eine laufende Nummer enthalten soll. In so einem Fall ist eine klassische for Schleife passend.
Wenn du den Index nicht brauchst, ist die erweiterte for Schleife meistens besser lesbar. Sie wird verwendet, um Arrays oder Collections Element für Element zu durchlaufen.
List<String> roles = List.of("ADMIN", "USER", "GUEST");
for (String role : roles) {
System.out.println(role.toLowerCase());
}
Fachlich bedeutet das: Für jede Rolle in der Liste wird eine Aktion ausgeführt. Du interessierst dich nicht für die Position der Rolle, sondern nur für das aktuelle Element. Genau dann ist for-each die ruhigere und klarere Variante.
Bei Collections wie List, Set oder Ergebnismengen aus deinem Service Code ist for-each oft die erste Wahl. Sie reduziert unnötige Details und macht den fachlichen Gedanken sichtbarer. Du zeigst nicht, wie gezählt wird, sondern was mit jedem Element passieren soll.
Anders sieht es aus, wenn du während des Durchlaufens Elemente entfernen willst. Dann solltest du nicht blind for-each verwenden, weil das je nach Collection zu Fehlern führen kann. Für solche Fälle gibt es Iteratoren oder gezielte Methoden wie removeIf.
List<String> names = new ArrayList<>(List.of("Anna", "", "Ben"));
names.removeIf(String::isBlank);
Das ist oft besser als eine selbst gebaute Schleife. Auch das gehört zum gezielten Einsatz von Schleifen: Manchmal ist die beste Schleife die, die du nicht selbst schreibst, weil die Standardbibliothek die Absicht klarer ausdrückt.
Fazit: die passende Schleife erkennst du an der Absicht
Die Frage ist selten: Welche Schleife kann das technisch? Meistens können mehrere Varianten dieselbe Aufgabe lösen. Die bessere Frage lautet: Welche Schleife beschreibt meine Absicht am klarsten?
Wenn eine Bedingung über den weiteren Ablauf entscheidet, passt while. Wenn der Ablauf mindestens einmal stattfinden muss und erst danach geprüft werden kann, passt do while. Wenn du einen Zähler oder eine Position brauchst, ist die klassische for Schleife sinnvoll. Wenn du einfach jedes Element einer Collection oder eines Arrays verarbeiten willst, ist for-each meistens die sauberste Wahl.
Guter Code zeigt nicht nur, dass etwas funktioniert. Er zeigt auch, was gemeint ist. Genau dabei helfen passend gewählte Schleifen. Sie machen Wiederholungen kontrollierbar, vermeiden kopierten Code und bilden fachliche Abläufe sauber ab.
Beim Schreiben kannst du dir eine einfache Kontrollfrage stellen: Wiederhole ich wegen eines Zustands, wegen einer festen Anzahl oder wegen einer Menge von Daten? Die Antwort führt dich fast immer zur passenden Schleife.
