0251 / 590 644 - 0
info@a-coding-project.de

Java: Schleifen

Eine Schleife ist ein Anweisungsblock, dessen Anweisungen mehrfach wiederholt werden. Beginn und Ende sind markiert. Wie oft die Schleife wiederholt wird, ist in der Schleifenbedingung festgelegt, die am Anfang oder am Ende der Schleife stehen kann.
Eine Schleife hat also folgende Struktur:

Beginn der Schleife (Schleifenkopf)
   Anweisung/Anweisungsblock in der Schleife (Schleifenrumpf);
Ende der Schleife (Schleifenfuß);

for-Schleife

Die for-Schleife eignet sich, wenn vor dem Start der Schleife schon feststeht, wie oft die Schleife durchlaufen werden soll. Beispiel: Unser Roboter soll jeweils 3 Autos in eine Schachtel packen. Die Anweisungen dazu sehen so aus:

for (AutosGenommen = 0; AutosGenommen < 3; AutosGenommen++)
  NimmAuto;

Allgemein formuliert:

for (int name=Anfangswert; logischer Ausdruck; Wertaenderung)
   Anweisung;

In der for-Zeile werden alle Parameter angegeben, welche die Schleife braucht: Anfangswert: Am Anfang hat der Roboter noch kein Auto genommen. Logischer Ausdruck: Er soll die Anweisungen in der Schleife solange wiederholen, wie die Anzahl AutosGenommen noch kleiner 3 ist. Wertaenderung: nach jedem Schleifendurchlauf wird AutosGenommen um eins erhöht.

Java arbeitet die Schleife so ab: Beim ersten Durchlauf ist AutosGenommen 0, also kleiner 3. Die Prozedur NimmAuto wird ausgeführt. Dann "sieht Java wieder im Schleifenkopf nach". AutosGenommen wird um 1 erhöht, ist also jetzt 1. Das ist immer noch kleiner 3, also wird die Schleife noch einmal durchlaufen, die Prozedur NimmAuto noch einmal ausgeführt. Und so weiter. Nach dem 3.Mal wird AutosGenommen auf 3 erhöht, ist jetzt also nicht mehr kleiner 3. Damit ist die Schleifenbedingung nicht mehr erfüllt. Java springt hinter die Schleife und macht dort weiter.
In unserem Beispiel enthält der Schleifenrumpf nur eine Anweisung. Deshalb können die geschweiften Klammern ({}) weggelassen werden. Bei mehreren Anweisungen sieht die Schleife so aus:

for (...)
{
  Anweisung1;
  Anweisung2;
  ...
  AnweisungN;
}

AnweisungNachDerSchleife;

Das gilt für alle Schleifenarten genauso wie für Verzweigungen.

for-in-Schleife

Sie ist eine Sonderform der for-Schleife. Sie durchläuft alle Eigenschaften eines Objekts. Was ein Objekt ist, wird später erklärt.

for (variable in object) 
{
    Anweisungen;
}

while-Schleife

Die while-Schleife eignet sich, wenn beim Einstieg in die Schleife noch nicht bekannt ist, wie oft die Schleife durchlaufen werden soll.
Eine häufige Anwendung ist das Lesen von Tabellen. Java liest eine Zeile nach der anderen ein. Wenn die letzte Zeile eingelesen ist (das merkt Java daran, dass es keine weitere Zeile mehr findet) wird die Schleife verlassen. Die Anzahl der Schleifendurchläufe vorher festzulegen, wäre unvernünftig, weil dazu die Tabelle schon vorab bis zum Ende gelesen werden müsste, um die Zeilenanzahl zu ermitteln, bevor die eigentliche Lese-Schleife beginnt.
In unserem Beispiel eignet sich die while-Schleife für das Holen der Autos:

EsSindAutosDa = true;
while (EsSindAutosDa)
{
  Verpacke3Autos;
  EsSindAutosDa = PruefeObNochAutosDaSind();
}

do-while-Schleife

Diese Schleife wird benötigt, wenn man eine Austrittsbedingung statt einer Eintrittsbedingung hat, dass heißt, dass die Bedingung am Ende des Schleifendurchlaufs geprüft wird. Hier wird die Anweisung also auf jeden Fall einmal ausgeführt.

do 
{
  Verpacke3Autos;
  EsSindAutosDa = PruefeObNochAutosDaSind();
}
while (EsSindAutosDa)

Das funktioniert, wenn am Anfang feststeht, dass Autos da sind. Die Schleife wird nämlich, ohne die Schleifenbedingung zu prüfen, mindestens einmal durchlaufen. Erst dann wird die Bedingung überhaupt zur Kenntnis genommen und geprüft, ob die Schleife noch einmal durchlaufen werden soll.

do Anweisung while ( logischer Ausdruck );

do { Anweisungen;} while ( logischer Ausdruck );

Beispiel:

int n = In.readInt();
do 
{
  Out.print(n % 10);
  n = n / 10;

while (n > 0);

Lables, break, continue

Manchmal ist es notwendig, die Schleife "mittendrin" abzubrechen, zu verlassen oder mit dem nächsten Durchlauf am Anfang der Schleife weiterzumachen. Dazu gibt es die Anweisungen break und continue. Sie dürfen nur in Schleifen stehen und unterscheiden sich in ihrer Wirkung: break verlässt die Schleife, indem es hinter dem Schleifenfuss fortsetzt, continue setzt am Schleifenkopf fort und durchläuft die Schleife weiter (wenn nicht eine Bedingung im Schleifenkopf das verhindert.
Lables sind Sprungmarken. Wenn ich weiß, dass das Programm an eine ganz bestimmte Stelle springen soll, kann ich diese Stelle mit einem Lable bezeichnen und aufrufen. Solche Sprünge sind aber unter Programmierern verpönt, weil sie das Verständnis erschweren. In den meisten Fällen kommt man ohne sie aus.