Weitere Schleifen: FOR und DO-WHILE
1. FOR-Schleife
1.1. Einstieg
Die bisher verwendete WHILE-Scheife ist in der Lage, ALLE Arten von Wiederholungen umzusetzen. Allerdings folgt der überwiegende Anteil an Wiederholungsanweisungen einem charakteristischen Muster. Dieses kann mit der FOR-Schleife sehr kompakt und übersichtlich realisiert werden.
Unsere bisher typischen WHILE-Schleifen hatten meistens 3 wichtige Komponenten:
-
Initialisierung einer "Laufvariablen" (meistens
i
) -
Prüfung der Fortsetzungsbedingung vor jedem Durchlauf (
while (fortsetzBed)
) {…} -
Am Ende jedes Durchlaufs Adaptieren der Laufvariablen für die nächste "Runde" (meistens
i++
oderi--
).
Die FOR-Schleife fasst diese 3 Komponenten in einem einzigen Statement zusammen - dadurch passiert es u.a. nicht mehr so leicht, dass man durch Vergessen des "Inkrements" eine Endlosschleife erzeugt.
Im folgenden Beispiel ist eine While-Schleife mit ihrem FOR-Äquivalent zu sehen:
public class DemoWhileOderFor
{
public void demoWhileSchleife() {
int i = 0;
while (i < 5) {
System.out.println(" WHILE-Runde " + i);
i++;
}
}
public void demoForSchleife() {
for (int i = 0; i < 5; i++) {
System.out.println(" FOR-Runde " + i);
}
}
}
Es fällt auf, dass die FOR-Schleife irgendwie übersichtlicher ist - ser strukturelle Rahmen ist kompakt und schnell überblickbar in einer Zeile definiert.
Wichtig: die 3 Elemente: Initialisierung, Fortsetzungsbedingung, Inkrement sind durch einen Strichpunkt (Semicolon) getrennt.
1.2. Wegfall von Komponenten in der FOR-Definition
Jedes der 3 Elemente könnte wegfallen. Wenn das mittlere Element (die Fortsetzungsbedingung) wegfällt, wird dies als true
interpretiert. Damit hat man eine Endlosschleife.
Die Strichpunkte MÜSSEN in jedem Fall geschrieben werden, da nur dadurch geklärt ist, welche Elemente da sind oder fehlen.
public void demoMiniEndlosForSchleife() {
for (;;) {
System.out.println("x");
}
}
1.3. Zusätzliches
Es dürfen auch mehrere Variable initialisiert werden, diese müssen aber den selben Typ haben und werden durch Beistrich getrennt. Auch die "Inkrement"-Komponente kann beistrich-getrennt mehrere Operationen enthalten (hier i++
und k mit 2 multiplizieren
):
public void demoForMultiVars() {
for (int i=0, k=1; i <= 10; i++, k*=2) {
System.out.println("i=" + i + ", 2^i=" + k);
}
}
2. DO-WHILE-Schleife
in Arbeit ...
Der wichtigste Unterschied zum "normalen" WHILE ist die Tatsache, dass die Fortsetzungsbedingung erst am ENDE des ersten Durchlaufes erstmals erfolgt.
Das bedeutet, dass der "Rumpf" der DO-WHILE-Schleife im Gegensatz zur nurmalen WHILE-Schleife mindestens 1 Mal durchlaufen wird - die Prüfung der Fortsetzungsbedingung erfolgt ja am Ende.
Deshalb wird die DO-WHILE-Schleife auch als fuß-gesteuert bezeichnet, die WHILE- und die FOR-Schleife dagegen als kopf-gesteuert.
public void demoDoWhile() {
int i = 0;
do {
System.out.println(" i=" + i);
i++;
} while (i < 5);
}