Universität Hamburg - Fachbereiche - Fachbereich Mathematik

Java-Kurs (2)

WiSe 01/02

Bodo Werner

Zurück zum Inhaltsverzeichnis.

2. Schleifen

for, while, do-while

Schleifen führen Anweisungen wiederholt aus, solange bis eine Bedingung erfüllt (ein Boole'scher Ausdruck wahr ist).

2.1 for-Schleife

Der 10-jährige C.F. Gauss wusste, dass die Summe der ersten n Zahlen durch die Formel n*(n+1)/2 gegeben ist. Wir überprüfen dies durch eine Schleife (in einem main()-Block):
//for1
int n, i, s1, s2;
n=10; s1=0;
for (i=1;i<=n;i++) s1+=i;
s2=n*(n+1)/2;
System.out.println(
   "Summe der ersten "+n+" Zahlen ist "+s1);
System.out.println("Nach Gauss: "+s2);
Eine for-Schleife hat den Aufbau for (A, B, C) D, wobei der Schleifenzähler in A initialisiert wird, der Anweisungsblock D ausgeführt wird, falls der Boole'sche Ausdruck B true ist, und danach der Schleifenzähler in C aufdatiert wird, um erneut D auszuführen, sofern B true ist. Die Schleife endet, wenn B erstmals false ist. Tritt dies nie auf, handelt es sich um einezu vermeidende Totschleife.

Besteht D aus mehreren Anweisungen, werden diese durch geschweifte Klammern zu einem Block zusammengefasst.

Beachte den Kurzoperator += und den Inkrementoperator ++ in obigem Java-Block.

Es kann übersichtlicher sein, den Schleifenzähler nur lokal innerhalb der Schleife zu deklarieren. Dies geschieht durch eine simultane Deklaration und Initialisierung:

for (int i=1;i<=n;i++) s1+=i;

2.2 while-Schleife

Denselben Zweck wie die obige for-Schleife erfüllt die folgende while-Schleife
//While1
int n, i, s1;
n=10; s1=0; i=0;
while(i<=n) {s1+=i++;}
System.out.println(
     "Summe der ersten "+n+" Zahlen ist "+s1);
Die Syntax einer while-Schleife ist while (A) B, wobei A ein Boole'scher Ausdruck und B ein Anweisungsblock ist, der immer ausgeführt wird, solange A true. Hier muss es keinen Schleifenzähler geben, jedoch sollte B den Boole'schen Ausdruck A verändern.

Im folgenden Beispiel wird a_n:=a^n mittels der Rekursion a_{n+1}=a*a_n, a_0=1 berechnet, wobei die Schleife solange durchlaufen wird, bis a_n<=ep (es ergibt sich i=1833, a_n wird in der double-Variablen p abgespeichert).


//While2
double a=0.99, p=1, ep=1E-8;
int i=0; 
while (p>ep) {p*=a; i++;}
System.out.println(
  "Die while-Schleife wurde "+i+" mal durchlaufen");
Der Schleifenzähler i dient hier nur externen Zählzwecken.

2.3 do-while-Schleife

Die Syntax einer do-while-Schleife ist do B while (A), wobei zunächst der Anweisungsblock B ausgeführt wird, dann der Boolesche Ausdruck A ausgewertet wird, bevor - wenn dieser true ist - wieder B ausgeführt wird. Sonst ist die Schleife zu Ende. Insbesondere wird B stets mindestens einmal ausgeführt.
Das letzte Beispiel kann folgendermaßen abgewandelt werden:
 
double a=0.99, p=1, ep=1E-8; int i=0; 
do {p*=a; i++;} while (p>ep) 
System.out.println(
  "Die do-while-Schleife wurde "+i+" mal durchlaufen"); 
Jetzt wird die Schleife genauso oft durchlaufen. Nur, wenn ep=1, wird sie einmal, die obige aber keinmal durchlaufen.

Weiter mit Methoden und Verzweigungen.