Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

6.3 Schleifen



Java besitzt die drei üblichen Schleifenanweisungen prozeduraler Programmiersprachen: eine nichtabweisende, eine abweisende und eine Zählschleife. Die Syntax und Semantik der Schleifen ist fast vollständig identisch zu den entsprechenden Anweisungen in C.

6.3.1 Die while-Schleife

Syntax

while (ausdruck)
  anweisung;

Bedeutung

Zuerst wird der Testausdruck, der vom Typ boolean sein muß, geprüft. Ist er true, wird die Anweisung ausgeführt, andernfalls wird mit der ersten Anweisung hinter der Schleife weitergemacht. Nachdem die Anweisung ausgeführt wurde, wird der Testausdruck erneut geprüft usw. Die Schleife wird beendet, sobald der Test false ergibt.

6.3.2 Die do-Schleife

Syntax

do
  anweisung;
while (ausdruck);

Bedeutung

Die do-Schleife arbeitet nichtabweisend, d.h., sie wird mindestens einmal ausgeführt. Da zunächst die Schleifenanweisung ausgeführt und erst dann der Testausdruck überprüft wird, kann die do-Schleife frühestens nach einem Durchlauf regulär beendet werden. Die Bearbeitung der Schleife wird immer dann beendet, wenn der Test des Schleifenausdrucks false ergibt.

6.3.3 Die for-Schleife

Syntax

for (init; test; update)
  anweisung;

Bedeutung

Der Kopf der for-Schleife besteht aus drei Ausdrücken, die jeder für sich optional sind:

break und continue

In Java gibt es zwei weitere Möglichkeiten, die normale Auswertungsreihenfolge in einer Schleife zu verändern. Taucht innerhalb einer Schleife eine break-Anweisung auf, wird die Schleife verlassen und das Programm mit der ersten Anweisung nach der Schleife fortgesetzt. Taucht dagegen eine continue-Anweisung auf, springt das Programm an das Ende des Schleifenrumpfs und beginnt mit der nächsten Iteration.

In der einfachsten Form arbeiten break und continue genauso wie in C und C++. Beide Anweisungen können innerhalb von do-, while- und for-Schleifen verwendet werden. Befindet sich ein break innerhalb einer mehrfach geschachtelten Schleife, so verläßt es die innerste Schleife. Dies gilt analog für continue. Neben dieser einfachen Form von break und continue gibt es in Java noch die mit einem Label versehene Form:

break Label;

continue Label;

Zu jedem mit einem Label versehenen break oder continue muß es eine mit einem Label versehene Kontrollstruktur geben, die diese Anweisung umschließt. Üblicherweise wird ein mit einem Label versehenes break verwendet, um zwei oder mehr geschachtelte Schleifen zu beenden:

001 loop1: for (int i=0; i<100; ++i) {
002    for (int j=0; j<100; ++j) {
003       if (A[i][j] > 42) {
004          break;
005      }
006       if (A[i][j] == null) {
007          break loop1;
008       }
009    }
010 }
Listing 6.6: Das gelabelte break

 Beispiel 

Dieses Programm enthält zwei geschachtelte for-Schleifen. Die äußere von beiden hat das Label loop1, und die innere ist ohne Label. Die erste break-Anweisung hat kein Label und verläßt daher nur die innere der beiden Schleifen. Das Programm fährt anschließend mit der nächsten Iteration der äußeren Schleife fort. Die zweite Form der break-Anweisung enthält das Label loop1 und verläßt daher die Anweisung mit eben diesem Label, in diesem Fall also die äußere for-Schleife.

Vollkommen analog zu der mit einem Label versehenen break-Anweisung kann auch die mit einem Label versehene Form der continue-Anweisung verwendet werden, um die nächste Iteration einer weiter außen liegenden Schleife einzuleiten:

001 loop1: for (int i=0; i<100; ++i) {
002    for (int j=0; j<100; ++j) {
003       if (A[i][j] > 42) {
004          continue;
005       }
006       if (A[i][j] == null) {
007          continue loop1;
008       }
009    }
010 }
Listing 6.7: Das gelabelte continue

 Beispiel 

Die break- und continue-Anweisungen, insbesondere die mit einem Label versehenen, stellen Sprunganweisungen dar. Allerdings sind ihre Möglichkeiten im Vergleich zum goto anderer Programmiersprachen auf kontrollierte Sprünge in Schleifenanweisungen beschränkt. Eine allgemeine Sprunganweisung gibt es in Java nicht (obwohl die Entwickler sich ein Hintertürchen offengelassen haben, indem sie goto zu einem reservierten Wort erklärt haben).

 Hinweis 

Die Bedeutung von gelabelten break- und continue-Anweisungen ist in der Praxis nicht so groß, wie man vermuten könnte. Unbedacht eingesetzt, können sie die Lesbarkeit eines Programmes sogar vermindern. Eine nützliche Anwendung des gelabelten break besteht darin, eine Schleife aus einer darin liegenden switch-Anweisung verlassen zu können.


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com