for, while, do-while
Schleifen führen Anweisungen wiederholt aus, solange bis eine
Bedingung erfüllt (ein Boole'scher Ausdruck wahr) ist.
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 oder Endlosschleife.
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;
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.
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.
|