Mit der for-Schleife kann ein Anweisungsblock mit einer bestimmten
Anzahl von Durchgängen wiederholt werden.
Im Kopf einer for-Schleife werden drei Dinge durch Semikolons getrennt
angegeben:
- Eine oder mehrere Zählvariablen mit dem jeweiligen Anfangswert
- Eine logische Bedingung, die vor jedem erneuten Durchgang erfüllt sein
muss, damit die Schleife fortgesetzt wird
- Inkrementierungsanweisungen, die festlegen, wie die Zählvariablen
am Ende jedes Durchgangs verändert werden
Im Prinzip sind alle drei Teile optional. Der Kopf
for(;;)
ist daher völlig korrekt und äquivalent zu
while(true)
und bewirkt eine Endlosschleife, die an einer Stelle im Schleifenrumpf mit break beendet werden muss.
Diese for-Schleife implementiert einen einfachen Zähler:
int i;
for(i = 1; i <= 10; i++)
System.out.println(i);
In Java ist es auch erlaubt, im Initialisierungs- und im Inkrementierungsteil
mehrere Anweisungen anzugeben. Hierzu werden die einzelnen Anweisungen durch Kommas
voneinander getrennt. Mehrere Bedingungen müssen über entsprechende Operatoren verknüpft werden.
In dieser Schleife wird zusätzlich zu i noch eine Variable j
verwendet. Der Kommaoperator wird dazu benutzt, beide Variablen zu initialisieren und bei jedem Durchlauf zu verändern.
int i, j;
for(i = 1, j = 10; i <= 10; i++, j--)
System.out.println(i+" "+j);
Häufig werden Zählvariablen für for-Schleifen nur innerhalb der Schleife benötigt. In Java können im Initialisierungsteil daher Variablen
vereinbart werden, die nur in der Schleife bekannt sind.
Variablen, die im Schleifenkopf vereinbart werden, überdecken gleichnamige
Variablen im übergeordneten Programmblock. Letztere bleiben während des Schleifendurchlaufs unverändert.
Im folgenden Beispiel wird i im Kopf der Schleife vereinbart:
for(int i = 1; i < 9; i++);
System.out.println(i);
i = 0; // Fehler, da i hier unbekannt
Mit dieser Technik können auch mehrere Variablen, durch Kommas getrennt, vereinbart werden:
for(int i=1,j=10; i<9; i++,j--)
Vereinbart man auf diese Weise mehrere Variablen im Schleifenkopf,
ergibt sich aber das Problem, dass der Kommaoperator zur Trennung
der Variablenvereinbarung und nicht zur Trennung verschiedener Initialisierungen
dient. Der Kommaoperator darf daher entweder nur für Variablenvereinbarungen
oder nur für Initialisierungen verwendet werden.
Aus diesem Grund liefern die Zeilen
int j;
for(int i=1,j=10; i<9; i++,j--) // Fehler
eine Fehlermeldung des Compilers, weil j=10 hier als
Variablenvereinbarung mit Anfangswert
und nicht als Initialisierung betrachtet wird. Da aber bereits vorher
eine Variable j vereinbart wurde, beschwert sich der Compiler
über eine doppelte Variablenvereinbarung.