n
Zahlen durch die Formel n*(n+1)/2
gegeben
ist. Wir überprüfen dies durch eine Schleife (in
einem main()
-Block):
Eine//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);
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;
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//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);
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).
Der Schleifenzähler//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");
i
dient hier
nur externen Zählzwecken.
true
ist - wieder B ausgeführt wird. Sonst
ist die Schleife zu Ende. Insbesondere wird B stets mindestens einmal
ausgeführt.
Jetzt wird die Schleife genauso oft durchlaufen. Nur, wenndouble 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");
ep=1
, wird sie einmal, die obige aber keinmal durchlaufen.