|
|
|||
Referenz:Die for-Schleife |
|||
Syntax der for-Schleife
1 Syntax der for-Schleife Eine for-Schleife besteht aus einem Schleifenkopf und einem Schleifenkörper. In Java besteht der Schleifenkopf aus dem Schlüsselwort "for" und drei Anweisungsblöcken, die in runden Klammern stehen und durch Semikolons voneinander getrennt sind. Der erste Anweisungsblock ist der Initialisierungsteil. Hier stehen alle Anweisungen, die vor dem ersten Schleifendurchlauf ausgeführt werden sollen. In Abbildung 1 besteht der Initialisierungsteil aus nur einer Anweisung. Es folgt im zweiten Block der Test der Schleifenbedingung. Nur wenn diese Bedingung den Wert "true" hat, wird die Schleife durchlaufen. Hat die Bedingung vor dem ersten Schleifendurchlauf den Wert "false", so wird die for-Schleife kein einziges Mal durchlaufen. Der letzte der drei Blöcke ist der Inkrementationsteil. In der Regel wird hier die Laufvariable (in Abbildung 1 also i) um einen bestimmten Wert erhöht (inkrementiert) oder erniedrigt (dekrementiert). Es sind auch andere Werte als 1 erlaubt!Der Schleifenkörper besteht entweder aus einem einfachen Befehl - dann müssen keine geschweiften Klammern verwendet werden - oder einem Befehlsblock. Dieser besteht aus mehreren Befehlen, die in geschweiften Klammern stehen und durch Semikolons voneinander getrennt sind. Verwendungfor-Schleifen werden meistens dann verwendet, wenn man bereits vor dem Kompilieren des Quelltextes weiß, wie oft die Schleife durchlaufen werden soll. Daher bezeichnet man for-Schleifen auch als Zählschleifen. Andernfalls verwendet man while-Schleifen oder do-Schleifen. |
|||
InitialisierungIn dem Initialisierungsteil stehen die Befehle, die vor dem ersten Schleifendurchgang ausgeführt werden sollen. In unserem Beispiel ist dies die Deklaration und gleichzeitige Initialisierung der Laufvariable i.Die Laufvariable wird deklariert: int i und gleichzeitig initialisiert: i = 1 Man kann auch mehrere Befehle gleichzeitig im Initialisierungsteil unterbringen, dann müssen sie allerdings durch Kommata getrennt werden: for (int i=1, int sum=0; i <= 100; i++) sum = sum + i; Hier ist i die Laufvariable, sum eine "normale" int-Variable, die später die Summe der Zahlen von 1 bis 100 enthalten soll. Falls die Laufvariable schon außerhalb der for-Schleife deklariert wurde, braucht sie im Initialisierungsteil nur noch initialisiert zu werden: int i;
...
for (i = 1; i <= 100; i++)
System.out.println("Nr. " + i);
Wenn die Laufvariable im Initialisierungsteil deklariert wird, so ist sie auch nur in der for-Schleife vorhanden. Außerhalb der for-Schleife existiert die Variable dann nicht. Wenn außerhalb der for-Schleife schon eine lokale Variable deklariert wurde, kann im Initialisierungsteil nicht noch eine zweite Variable mit dem gleichen Namen deklariert werden. int i;
...
for (int i = 1; i <= 100; i++)
System.out.println("Nr. " + i);
|
|||
TestDieser Teil der for-Schleife enthält einen logischen Ausdruck, der vor jedem Schleifendurchgang überprüft wird. Nur wenn der Ausdruck den Wert true hat, wird der Schleifenkörper durchlaufen. Hat der logische Ausdruck den Wert false, so wird die Schleife nicht durchlaufen. |
|||
InkrementationIn diesem dritten Teil des Schleifen-Kopfes steht die Anweisung, die am Ende eines jeden Schleifendurchgangs ausgeführt werden soll. Meistens ist dies die Inkrementierung der Laufvariable, daher ist die Bezeichung "Inkrementationsteil" zu erklären. In der folgenden Schleife wird die Laufvariable k jedesmal um den Wert 3 inkrementiert: for (int k=12; k <= 120; k+=3) ... Selbstverständlich kann man im Initialisierungsteil auch eine Gleitkommazahl als Laufvariable deklarieren und darf dann im Inkrementationsteil um einen Gleitkommabetrag inkrementieren: for (double x = 0; x <= 100; x = x + 0.1) y = x*x; Wenn man um eine negative Zahl inkrementiert, so spricht man üblicherweise von einer Dekrementation: for (int k=12; k <= 120; k = k-3) ... Diese for-Schleife ist syntaktisch völlig korrekt, leider wird sie nicht so ablaufen, wie der Programmierer es sich gedacht hatte, denn sie enthält einen logischen Fehler! |
|||
Übung 1for (int k=12; k <= 120; k = k-3) ... Finden Sie den logischen Fehler in der obigen for-Schleife! Übung 2int j; for (int i=1, j=2; i > -10; i--)...Warum liefert der Compiler hier einen Fehler im Initialisierungsteil? Übung 3public int summe()
{
for (int sum=0,i=0;i<100;i++)
sum+=i;
return sum;
}
Warum liefert der Compiler hier einen Fehler bei "return sum"?
|
|||
Geschachtelte for-SchleifenDas folgende Beispiel zeigt eine zweifache for-Schleife for (int i=1; i <= 10; i++)
for (int j=1; j <= 10; j++)
System.out.println(i+" mal "+j+" = "+i*j);
Zunächst wird die äußere Laufvariable i auf den Wert 1 gesetzt. Da die Bedingung i <= 10 erfüllt ist, wird der Anweisungsteil der äußeren for-Schleife ausgeführt. Die einzige Anweisung in diesem Anweisungsteil ist die innere for-Schleife. Hier wird die innere Laufvariable j auf den Wert 1 gesetzt, dann wird die Schleifenbedingung j <= 10 getestet. Da der Test den Wert true ergibt, wird jetzt der Anweisungsteil der inneren for-Schleife durchlaufen. Die Multiplikation i*j wird ausgegeben, das Ergebnis ist also 1. Nachdem das Ergebnis ausgegeben wurde, befinden wir uns immer noch in der inneren for-Schleife. Beim zweiten Schleifendurchgang hat j den Wert 2, so dass die Berechnung "1 mal 2 = 2" ausgegeben wird. So geht das erst mal weiter, bis j den Wert 10 hat. Im letzten Schleifendurchgang der inneren for-Schleife wird "1 mal 10 = 10" ausgegeben. Nun ist die innere for-Schleife beendet, denn die Schleifenbedingung ist nicht mehr erfüllt, da j jetzt den Wert 11 hat. Die innere for-Schleife und damit die einzige Anweisung der äüßeren Schleife ist abgearbeitet, und somit kommt es zum zweiten Schleifendurchgang der äußeren Schleife. Die äußere Laufvariable i wird auf den Wert 2 gesetzt, und dann wird wieder die einzige Anweisung der äußeren Schleife ausgeführt, nämlich die innere Schleife. Hier wird j wieder auf 1 gesetzt, denn die innere Schleife startet völlig neu. Als erstes wird die Rechnung "2 mal 1 = 1" ausgegeben, beim zweiten Durchlauf der inneren Schleife die Rechnung "2 mal 2 = 4" und so weiter. Ist die innere Schleife beendet, so startet der dritte Durchgang der äußeren for-Schleife, dann der vierte, und so weiter, bis auch die äußere for-Schleife beendet ist. |
|||
Schleifen und ArraysWenn man mit Arrays arbeitet, bieten sich for-Schleifen als Hilfsmittel zum Durchlaufen des gesamten Arrays geradezu an. Ein Array besteht aus einer bestimmten Anzahl von Elementen, z.B. genau 100 int-Variablen. Will man alle 100 Elemente des Arrays ausgeben, so kann man dies mit einer for-Schleife schnell erreichen: for (int i = 0; i < 100; i++)
System.out.println
("Zahl "+i+" = " + zahl[i]);
Hier muss man genau aufpassen: Arrays starten immer mit dem Index 0, das erste Array-Element hat also den Index 0 und nicht den Index 1, wie man vielleicht meinen könnte. Entsprechend muss die for-Schleife aufgebaut sein: Man initialisiert die Lauf-Variable mit dem Wert 0 und nicht mit dem Wert 1. Wenn der Array 100 Elemente umfasst, so hat das letzte Element nicht den Index 100, sondern den Index 99. Also muss man dafür sorgen, dass die Laufvariable in dem Schleifenkörper nicht den Wert 100 annimmt. Entsprechend wird der Schleifentest auf i < 100 und nicht i <= 100 gesetzt. |
|||
|
Diese HTML-Seite wurde erstellt von Ulrich Helmich am 17. März 2005 mit Golive 6. |
|||