2.5.5 | for |
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:Im Prinzip sind alle drei Teile optional. Der Kopf
- 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
for(;;)ist daher völlig korrekt und äquivalent zuwhile(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 unbekanntMit 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 Zeilenint j; for(int i=1,j=10; i<9; i++,j--) // Fehlereine 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.