Schleife
Einführung
Eine Schleife ist eine wichtige Kontrollstruktur. Sie wiederholt einen Anweisungs-Block – den so genannten Schleifenrumpf oder Schleifenkörper – so lange, wie eine Schleifenbedingung als Laufbedingung gültig bleibt bzw. als Abbruchbedingung nicht eintritt. Die Schleifenbedingung wird mit Hilfe der booleschen Algebra formuliert. Schleifen können in der Java-Programmierung nur im Körper von Methoden und Konstruktoren implementiert werden. Schleifen, deren Schleifenbedingung immer zur Fortsetzung führt oder die keine Schleifenbedingung haben, sind Endlosschleifen. Eine Endlosschleife ist ein typischer logischer Fehler in der Programmierung und kann nur durch einen Eingriff von außen unterbrochen werden (http://openbook.galileocomputing.de/javainsel9/javainsel_02_007.htm#mjb517285509ecebe1bb38c15fc43).
Prinzipiell werden folgende Schleifentypen unterschieden:
Die kopfgesteuerte oder vorprüfende Schleife, bei der die Schleifenbedingung geprüft wird, bevor der Schleifenrumpf durchlaufen wird (meist mit WHILE).
Die fußgesteuerte oder nachprüfende Schleife, bei der nach dem Durchlauf des Schleifenrumpfes die Schleifenbedingung überprüft wird (meist als DO...WHILE = „ausführen...solange“ Konstrukt).
Aufbau
Jeder Schleife besteht aus einem Schleifenkopf bzw. Schleifenfuss. Hier wird die Laufbedingung im Sinne der boolschen Algebra definiert. Im Schleifenkörper werden Anweisungen definiert, die bei jedem Schleifendurchlauf (Iteration) wiederholt durchzuführen sind.
WHILE-Schleife
Unsere erste Betrachtung gilt der While - Schleife. Sie wird als kopfgesteuert bezeichnet, weil zu Beginn die Ausführbedingung im Sinne der boolesche Algebra überprüft wird. Ist die Ausführbedingung erfüllt, wird der Körper ausgeführt. Diese Schleife wird so oft durchlaufen, wie die Bedingung wahr ergibt. Eine logische Operation kann beispielsweise sein: (i>10). Solange diese Bedingung wahr ist, läuft die Schleife. Wird kein Vergleichsoperator der Stopp-Bedingung im Schleifenkörper geändert, ist diese Kontrollstruktur meist nicht die richtige. Die Schleife wird dann entweder kein einziges Mal durchlaufen oder unendlich lang.
Im folgenden Beispiel wird eine einfache Variable i deklariert und initialisiert. Die Schleife wird nun so oft durchlaufen, wie die Variable kleiner als zehn ist. Um sicherzustellen, dass die Schleife nicht zu einer endlosen Ausgabe führt, wird die Variable im Anweisungsblock hochgezählt. Die Ausgabe liefert: 012345789.
public class MyClass{
public void testeSchleife(){
// Deklaration und Initialisierung einer Schleifenvariablen
int i = 0;
// Kopf einer Schleife mit Laufbedingung "so lange i<10"
while(i<10) {
// Schleifen Körper, der solange ausgeführt wird, solange i kleiner 10 ist
System.out.print(i);
// Die Schleifen Variable wird verändert, damit die Laufbedingung beendet wird und die Schleife nicht endlos oft ausgeführt wird
i++;
}
}
}
FOR-Schleife
Die sogenannte For – Schleife ist ein Spezialfall der kopfgesteuerten WHILE-Schleife und setzt sich aus drei Bereichen zusammen.
Im ersten Bereich wird eine Variable deklariert und initialisiert.
Im zweiten Bereich wird eine Aussage im Sinne der booleschen Algebra überprüft. Ist die Aussage WAHR, wird der Körper der Schleife ausgeführt.
Im dritten Teil werden Variablen verändert, die für die Prüfung relevant sind.
Im ersten Schritt werden alle Variablen erzeugt, was jedoch nur einmalig beim Eintritt in die Schleife geschieht. Danach wird die eigentliche Bedingung getestet und gegebenen Falls der Anweisungsblock ausgeführt. Drittens wird die im ersten Schritt deklarierte und im zweiten Schritt überprüfte Variable hoch bzw. runter gezählt (inkrementiert bzw. dekrementiert). Die Anweisungen im Schleifenkörper werden solange ausgeführt, wie die Bedingung wahr ergibt.
List<String> list = new ArrayList<String>();
list.add("Text 1");
list.add("Text 2");
list.add("Text 3");
for (String temp : list) {
System.out.println(temp);
}
Hier werden String Objekte der dynamischen Datenstruktur list vom Typ ArrayList hinzugefügt. Anschließend werden sie mit Hilfe der FOR-EACH-Schleife ausgelesen. Es reicht eine lokale Variable mit passendem Datentyp zu definieren; hier also String. Im Körper der Schleife werden die Objekte der list eines nach dem anderen an die lokale Variable temp übergeben. Wurden alle Elemente der list ausgelesen, stoppt die Schleife. Das temp Objekt steht im Körper der Schleife zur Verarbeitung bereit.
Do-While-Schleife
Die Do-While-Schleife ist eine Variante der While-Schleife. Der Unterschied besteht darin, dass der Code der Schleife mindestens einmal ausgeführt wird, bevor die Stopp-Bedingung erstmalig überprüft wird.
Das folgende Beispiel soll dies verdeutlichen. Zu beachten ist die Syntax der Anweisung. Sie setzt sich zusätzlich aus dem Do-Befehl zusammen. Obwohl unsere Variable als falsch definiert ist, wird unsere Schleife mindestens einmal ausgeführt.
public class MeineKlasse{
public void testDoWhile() {
boolean b = false;
do{
System.out.print("Java");
}while(b);
}
}