Was ist eine do-while-Schleife?
Die Syntax der Schleife beginnt mit dem Schlüsselwort do
,
gefolgt vom in geschweifte Klammern gefassten sog.
Schleifenkörper. Er enthält die wiederholt
auszuführenden Anweisungen. Nach der schließenden
geschweiften Klammer steht das Schlüsselwort while
gefolgt von einem Paar runder Klammern und dem Abschluss des
Ausdrucks durch ein Semikolon. Innerhalb der Klammern ist die
Abbruchbedingung als boolscher Ausdruck notiert.
Oft wird
hier eine sog. Zählvariable verwendet, um die Anzahl der
Ausführungswiederholungen zu steuern. Im Gegensatz zur for-Schleife wird diese bei der
do-while-Schleife, wie bei der while-Schleife
auch, vor der eigentlichen Schleife erzeugt und dann innerhalb
des Schleifenkörpers bei jedem Durchlauf modifiziert.
public class DoWhileClass {
public void gibAus(){
int i=0;
do{
System.out.println(i);
i++;
}while(i<10);
}
public static void main(String[] args){
DoWhileClass dwc = new DoWhileClass();
dwc.gibAus();
}
}
Der genaue Ablauf stellt sich wie folgt dar:
Wird der
Schleifenkörper während der Ausführung des
Programms erreicht, wird als erstes der Schleifenkörper
betreten und die darin enthaltenen Anweisungen der Reihe nach
ausgeführt. Bei Verwendung einer numerischen
Zählvariablen wird diese hier an prinzipiell beliebiger
Stelle inkrementiert oder dekrementiert. Nach Auswertung aller
im Körper notierten Ausdrücke, wird die
Abbruchbedingung überprüft. Liefert sie true
,
springt der Zeiger wieder an den Anfang des
Schleifenkörpers und die hier notierten Anweisungen werden
erneut verarbeitet. Liefert sie false
, so wird die
Schleife verlassen und das Programm weiter abgearbeitet.
Es zeigt sich, dass der Inhalt der Schleife mindestens ein Mal ausgewertet wird, da die Abbruchbedingung erst nach einem vollständigen Schleifendurchlauf erstmalig überprüft wird. Im Gegensatz zur Kopfsteuerung der for-Schleife und der while-Schleife spricht man hier von einer fußgesteuerten Schleife.
Bei der Verwendung der do-while-Schleife schleichen sich leicht
Fehler ein: Fehlt die Abbruchbedingung, wird diese niemals false
oder fehlt die Änderung der Zählvariablen entsteht
möglicherweise eine Endlosschleife, die das Programm zum
Absturz bringen oder einfrieren kann.
int i=0; do{ System.out.println(i); i++; }while(i<0); // Fehler, nicht erreichbar
Das Beispiel zeigt einen solchen Fehler. Die Abbruchbedingung
verlangt, dass i
kleiner 0
wird. Die
Variable wurde jedoch mit 0
initialisiert und kann
durch das Inkrement im Schleifenkörper niemals kleiner 0
werden. Obwohl die Abbruchbedingung folglich bereits bei der
ersten Überprüfung false
ergibt, wird der
Wert von i
ein Mal ausgegeben.
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.