Schleifen in Java

java schleifen erklärt

Java Schleifen erklärt: Die for-Schleife passt zu einer festen Anzahl von Wiederholungen, die while-Schleife zu Abbruchbedingungen, die sich erst im Lauf ergeben, und die do-while-Schleife, wenn der Rumpf mindestens einmal laufen muss.

Schleifen gehören zu den Grundbausteinen, die der Überblick zu java lernen schule einordnet. Dieser Beitrag stellt jede Schleifenart mit einem Schulbeispiel vor und zeigt, wie sich Durchläufe in einer Trace-Tabelle von Hand nachvollziehen lassen.

Kriterien für die Wahl der Schleife

Eine allgemeingültige Rangfolge gibt es nicht. Welche Schleife die beste Wahl ist, entscheidet die Aufgabe, und drei Fragen reichen meist aus. Die Reihenfolge der folgenden Liste ist deshalb eine Auswahlhilfe, keine Wertung.

  • Ist die Anzahl der Wiederholungen von Anfang an bekannt? Dann ist die for-Schleife die naheliegende Wahl. Das ZUM-Unterrichten-Wiki beschreibt sie als sinnvoll, wenn eine bestimmte Anzahl von Wiederholungen durchgeführt werden soll.
  • Hängt das Ende von einer Bedingung ab, die sich erst während des Laufs ergibt? Dann passt die while-Schleife. Nach dem ZUM-Wiki verwendet man sie bei dynamischen Abbruchbedingungen und die for-Schleife bei einer festen Anzahl.
  • Muss der Rumpf zwingend mindestens einmal laufen? Dann bietet sich die do-while-Schleife an, weil sie ihre Bedingung erst nach dem Schleifenrumpf prüft.

Die Schleifenbedingung ist in allen Varianten das Steuerungselement: In jeder Runde entscheidet sie, ob die Wiederholung weiterläuft. Wer Bedingungen schon aus der java if else verzweigung kennt, kann dieses Wissen direkt übertragen. Der Zähler ist eine Variable, die sich bei jedem Durchlauf verändert. In den Schulbeispielen des Wikis geschieht das entweder im Schleifenkopf oder im Rumpf, etwa mit i++ oder zaehler–.

Die Schleifenarten mit Schulbeispiel

for-Schleife: der Klassiker für feste Wiederholungen

Die for-Schleife bündelt alles Nötige im Kopf: Zählvariable mit Initialisierung, Abbruchbedingung und Inkrementierung. Das ZUM-Wiki gibt den allgemeinen Aufbau als for ( int Zählvariable mit Initialisierung ; Abbruchbedingung ; Inkrementierung ) an, gefolgt vom Anweisungsblock in geschweiften Klammern. Für Einsteiger ist das ein Vorteil, weil sich Start, Ende und Schrittweite an einer Stelle ablesen lassen.

Entwicklungsumgebung im dunklen Editor: Eine Konsole ist hier nicht zu sehen, die Aufnahme dient nur als Sinnbild für das Arbeiten am Quelltext.

Ein typisches Schulbeispiel ist das kleine Einmaleins von 3, das das Wiki per Schleife ausgeben lässt, von 3 x 1 = 3 bis 3 x 9 = 27. Die Schleife nimmt dabei die Schreibarbeit ab, die sonst jede Zeile einzeln verlangen würde. Die Schrittweite ist frei wählbar: Mit for ( int i = 1 ; i <= 10 ; i += 5 ) zählt die Schleife laut Wiki in 5er-Schritten hoch.

Die for-Schleife eignet sich für alle, die eine Zählaufgabe lösen wollen. Ihre Grenze zeigt sich, sobald das Ende nicht vorab feststeht. Dann ist laut ZUM-Wiki die while-Schleife die passendere Form.

while-Schleife: Wiederholung, solange eine Bedingung gilt

Die while-Schleife führt eine Abfolge von Anweisungen mehrfach aus, solange eine Bedingung erfüllt ist. Die Bedingung wird geprüft, bevor die Anweisungsfolge abgearbeitet wird. Der Rumpf kann deshalb auch null Mal laufen, wenn die Bedingung von Anfang an nicht stimmt.

Zwei Schulbeispiele aus dem ZUM-Wiki zeigen die beiden typischen Rollen. Bei der Fakultätsberechnung läuft while ( zaehler > 1 ) mit den Anweisungen fakultaet *= zaehler und zaehler–. Hier steuert der Zähler selbst das Ende. Beim Wurf-Experiment läuft while ( i <= anzahl ), und im Rumpf gibt eine Zeile den Wurf aus, bevor i++ den Zähler erhöht.

Konzentriertes Nachvollziehen am Laptop: Wer jede Runde Zeile für Zeile notiert, findet Denkfehler in der Bedingung schneller.

Die while-Schleife eignet sich, wenn das Ende von Daten oder Zuständen abhängt. Ihr Risiko liegt darin, dass die Veränderung des Zählers im Rumpf stehen muss. Wer sie vergisst, ändert die Bedingung nie (siehe Abschnitt zu Endlosschleifen).

do-while-Schleife: erst ausführen, dann prüfen

Die java do while schleife ist fußgesteuert: Nach dem Durchlauf des Schleifenrumpfes wird die Abbruchbedingung überprüft. Daraus folgt, dass der Rumpf mindestens einmal ausgeführt wird. Das ZUM-Wiki nutzt dafür ein Würfelspiel, bei dem mindestens einmal gewürfelt werden muss.

Das Beispiel lautet: do { wuerfel = ( int ) ( Math . random () * 6 + 1 ); } while ( wuerfel != 6 ); Die Schleife würfelt also so lange, bis eine 6 fällt. Der Wurf muss zuerst stattfinden, weil die Bedingung ohne einen Wurf noch gar keinen Wert zum Vergleichen hätte. Die do-while-Schleife eignet sich für solche Fälle, in denen ein Wert erst im Rumpf entsteht. Sie ist die seltenste der drei Formen, deshalb lohnt es sich, sie bewusst von der while-Schleife zu unterscheiden.

Symbolbild für Quelltext im Editor: Aus Zeilen wie dem for-Kopf liest man Start, Bedingung und Schrittweite ab. Die abgebildete Sprache ist nicht Java.

Vergleich der Schleifenarten

Die Tabelle stellt die drei Schleifen nach denselben Kriterien nebeneinander.

Schleife Bedingung und Aufbau Typischer Einsatz Schulbeispiel
for-Schleife Zählvariable, Abbruchbedingung und Inkrementierung stehen im Schleifenkopf Feste Anzahl von Wiederholungen Kleines Einmaleins von 3
while-Schleife Bedingung wird vor dem Durchlauf geprüft, der Rumpf kann null Mal laufen Dynamische Abbruchbedingung Fakultät mit zaehler > 1
do-while-Schleife Bedingung wird nach dem Rumpf geprüft, mindestens ein Durchlauf Rumpf muss zuerst laufen Würfeln, bis eine 6 fällt

Die Angaben stammen aus dem ZUM-Unterrichten-Wiki zur Schleife in Java.

Durchläufe von Hand nachrechnen

Eine Trace-Tabelle macht sichtbar, was die Schleife bei jedem Durchlauf tut. So gehen Sie vor:

  1. Legen Sie eine Spalte für jede Variable an, die sich verändert, und eine für die Schleifenbedingung.
  2. Tragen Sie in der ersten Zeile den Startwert ein.
  3. Prüfen Sie die Bedingung und notieren Sie, ob sie wahr oder falsch ist.
  4. Führen Sie bei wahrer Bedingung den Rumpf aus und tragen Sie die neuen Werte in die nächste Zeile ein.
  5. Wiederholen Sie das, bis die Bedingung falsch wird. Dann endet die Schleife.

Die Methode funktioniert für alle Schleifenarten. Bei der do-while-Schleife prüfen Sie die Bedingung erst nach dem Rumpf, bei den anderen davor. Das erste Beispiel ist der Countdown aus dem ZUM-Wiki: for ( int i = 10 ; i >= 1 ; i– ) zählt von 10 bis 1.

Runde Wert von i Bedingung i >= 1 Folge
Erste Runde 10 wahr Rumpf läuft, danach i–
Weitere Runden sinkt jeweils um eins wahr Rumpf läuft, danach i–
Letzte Runde 1 wahr Rumpf läuft, danach i–
Prüfung danach unter 1 falsch Schleife endet

Das Beispiel folgt dem Countdown im ZUM-Unterrichten-Wiki.

Das zweite Beispiel ist die Fakultätsberechnung mit while ( zaehler > 1 ). Hier legt der Startwert von zaehler fest, wie oft der Rumpf läuft. Tragen Sie daher bei einer Aufgabe zuerst den vorgegebenen Startwert ein.

Schritt zaehler Bedingung zaehler > 1 Anweisungen im Rumpf
Start vorgegebener Startwert wird zuerst geprüft fakultaet *= zaehler, danach zaehler–
Folgende Runden wird bei jeder Runde kleiner wahr, solange zaehler größer als 1 ist fakultaet *= zaehler, danach zaehler–
Ende nicht mehr größer als 1 falsch keine, fakultaet enthält das Ergebnis

Grundlage ist das Fakultätsbeispiel im ZUM-Wiki zu Schleifen.

Verschachtelte Schleifen

Bei java verschachtelten schleifen steht eine Schleife im Rumpf einer anderen. Die innere Schleife läuft dann bei jeder Runde der äußeren vollständig ab. Ein Schulbeispiel ist ein Einmaleins-Quadrat: Die innere Schleife erzeugt eine Zeile nach dem Muster der 3er-Reihe aus dem ZUM-Wiki, die äußere Schleife wechselt die Reihe.

Lernspielzeug mit Multiplikationsaufgaben: eine Veranschaulichung des Einmaleins-Themas, keine Konsolenausgabe eines Programms.

Für die Trace-Tabelle gilt: Führen Sie für jede Schleife eine eigene Zählerspalte und notieren Sie, welcher Zähler sich bei einem Schritt ändert. Der innere Zähler wechselt am schnellsten, der äußere nur nach einem vollständigen inneren Ablauf. Wer beide Zähler getrennt führt, behält den Überblick auch bei längeren Ausgaben. Beginnen Sie am besten mit einer einzelnen Schleife und erweitern Sie erst danach um die zweite.

Endlosschleifen erkennen und vermeiden

Eine java endlosschleife entsteht, wenn die Schleifenbedingung nie falsch wird. In den Schulbeispielen des ZUM-Wikis sorgt eine Anweisung dafür, dass sich die Bedingung irgendwann ändert: zaehler– bei der Fakultät, i++ beim Wurf-Experiment und der Wurf selbst beim do-while-Würfeln. Fehlt eine solche Anweisung, bleibt die Bedingung unverändert wahr, und das Programm wiederholt den Rumpf ohne Ende.

Prüfen Sie daher bei jeder while- und do-while-Schleife drei Dinge: Welche Variable steht in der Bedingung? Wo im Rumpf wird sie verändert? Bewegt sich der Wert in Richtung des Abbruchs? Bei der for-Schleife übernimmt der Schleifenkopf diese Aufgabe, was sie weniger anfällig macht. Läuft ein Programm trotzdem endlos, lässt es sich über die Entwicklungsumgebung von außen beenden. Der Fehler selbst steckt dann meist in der Bedingung oder im fehlenden Zählerschritt.

Wiederholter Code lässt sich außerdem in eigene Bausteine auslagern. Wie das geht, zeigt der Beitrag zu java methoden schreiben.

Frequently asked questions

Welche Schleifenarten gibt es in Java?

In diesem Beitrag stehen die for-Schleife, die while-Schleife und die do-while-Schleife im Mittelpunkt. Die erste ist für feste Anzahlen gedacht, die zweite prüft vor jedem Durchlauf, die dritte nach dem Rumpf.

Wie zählt eine for-Schleife in größeren Schritten?

Die Schrittweite steht im dritten Teil des Schleifenkopfes. Das ZUM-Wiki nennt for ( int i = 1 ; i <= 10 ; i += 5 ) als Beispiel für das Hochzählen in 5er-Schritten.

Wofür braucht eine Schleife einen Zähler?

Der Zähler hält fest, wie weit die Wiederholung fortgeschritten ist, und liefert der Schleifenbedingung ihren Vergleichswert. In der for-Schleife steht er mit Startwert und Veränderung im Kopf, in der while-Schleife wird er im Rumpf angepasst.