11.2.2 Do-While-Schleife
 
do {..} while(..) Eine weitere Art eine Iteration zu realisieren ist die do Schleife. In der Normsprache hat sie folgende Gestalt: 
Normsprache Wiederhole
Anweisung|Anweisungsblock
solange (Bedingung wahr)

Vor dem Einstieg in den Schleifenkörper findet, anders als bei der while-Schleife keine Abfrage statt. Es werden also auf jeden Fall alle Anweisungen des Schleifenkörpers abgearbeitet. Ob nach diesem ersten Durchgang weitere stattfinden sollen, wird nach dem Schleifenkörper abgefragt: Ein boolescher Ausdruck (Weiter-Machen-Bedingung)  wird ausgewertet, ist er true, beginnt der Rechner erneut mit dem Abarbeitung der Anweisungen im Schleifenkörper. Erst wenn die "Weiter-Machen-Bedingung" false ist, wird der Schleifenkörper nicht wieder durchlaufen und der Rechner setzt das Abarbeiten des Programms nach der Schleife fort. Wir sehen, im Schleifenkörper muss wieder eine Veränderung stattfinden, die es erlaubt, dass die "Weiter-Machen-Bedingung" möglicherweise zu false ausgewertet wird.

 

Struktogramm Das Struktogramm verdeutlicht den Unterschied zur while-Schleife. Dort wird das Durchlaufen der Schleife durch ein 'Vorbedingung', hier durch eine 'Nachbedingung' gesteuert.

Im Gegensatz zur while-Schleife, kann man bei der do-Schleife mindestens einen Schleifendurchgang garantieren.

 

Java-Syntax
do
{
   Anweisung1;
   Anweisung2;
   ....
   Anweisung_n;
}
while(<Bedingung>)
 
Beispiel 1

Download:
Summe.java

Es soll zu einem eingegeben Wert n die Summe der ersten n natürliche Zahlen bestimmt werden.
import info1.*;
public class Summe {
  public static void main (String args[]) {
     System.out.print("n: ");
     int n = Console.in.readInt();
     int summe = 0;
     int i = 1;
     do{
       summe += i;//oder: summe=summe+i;
       i++;
     } while(i<=n);
     System.out.println("Die Summe ist: "+summe);
  }
}

 

Beispiel 2:
Iteratives Berechnen der Quadratwurzel

Download:
Wurzel.java

 

public class Wurzel{
  public static void main(String[] args){
    final double a = 2;
    double xNeu = 5;
    double xAlt;
    do {
      xAlt = xNeu;
      xNeu = (xAlt+a/xAlt)/2;
    }
    while (Math.abs(xAlt-xNeu)!=0);
    System.out.println(xNeu);
  }
}

In unserem Programm wird die Quadratwurzel von 2 über eine Folge berechnet:



Der Schleifenabbruch geschieht, wenn Java die Näherungswerte zweier aufeinander folgenden Iterationen für Wurzel von 2 nicht mehr unterscheiden kann, oder näher an der Idee der do-while-Schleife formuliert: Die Iteration läuft solange Java die Werte zweier aufeinander folgender Iterationen unterscheiden kann. Es handelt sich also um keine mathematische Abbruchbedingung.

 

zu 11.2.3  
zur Startseite www.pohlig.de (C) MPohlig 2003