Was ist eine do-while-Schleife?

Die do-while-Schleife ist eine Struktur, in der Anweisungen wiederholt, mindestens jedoch ein Mal ausgeführt werden. Die Anzahl der Ausführungen ist abhängig von der Prüfung einer Abbruchbedingung.

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.