Für Arrays gibt es zusätzlich eine veränderte/ erweiterte Form der for-Schleife; statt
for (int b=0; b<a.length; b++)
System.out.println(a[b]);
hat
for (int b : a)
System.out.println(b);
den gleichen Effekt.
Für Arrays gibt es zusätzlich eine veränderte/ erweiterte Form der for-Schleife; statt
for (int b=0; b<a.length; b++)
System.out.println(a[b]);
hat
for (int b : a)
System.out.println(b);
den gleichen Effekt.
Es gibt noch ein paar Kleinigkeiten, die ich erwähnen möchte, bevor wir das Kapitel “For-Schleifen” abschließen können;
Die Bedingung kann absolut unabhängig von der Intitialisierung sein:
for (int a=0; b <12 ; a++){
b++;
}
kompiliert daher fehlerfrei.
Das die Iteration weggelassen werden kann, haben ich ja schon erläutert. Sie kann aber auch durch etwas anderes ersetzt werden:
for (int a=0; b <12 ; System.out.println(“Hallo”)){
b++;
}
Die Ausgabe ist
Test
Test
Wir haben ja schon besprochen, dass eine for-Schleife folgendermaßen aufgebaut ist:
for (<Initialisierung>;<Bedingung>;<Iteration>) { Schleifen-Inhalt }
Dies bedeutet aber nicht, dass jeder einzelne Bereich gefüllt werden muss.
for ( ; ; ) { … }
ist also eine valide Deklaration, auch wenn diese ohne Bedingung und Iteration eine Endlosschleife darstellt. Mit break kann diese Endlossschleife beendet werden:
int i=0;
for ( ; ; ){
if (i++==10)
break;
}
Häufiger als dies werden leere Teilbereiche innerhalb der For-Schleife benutzt:
int i = 10;
for ( ;i<5;i–){ … }
Mit System.exit(0) innerhalb einer for-Schleife wird das Programm sofort abgebrochen, eine Weiterführung der bestehenden Schleifen, des Unterprogrammes oder des Hauptprogrammes findet nicht statt.
class Angestellter {
public static void main(String args[]) {
System.out.println(“Start im Hauptprogramm: “);
Buchhalter.forSchleife(); // Aufruf der statischen Methode “forSchleife()” von Buchhalter.
System.out.println( “Ende des Hauptprogrammes”);// Hauptprogramm wird bei System.exit(0) nicht weiter ausgeführt
}
}
class Buchhalter extends Angestellter {
public static void forSchleife() {
System.out.println(“Start Unterprogramm: “);
for (int b=0; b<3; b++) { // Schleife 1
for (int a=0; a < 10; ++a){ // Schleife 2
System.out.print(“\na: “+a);
if (a==2)
System.exit(0); // System-Ausstieg
}
System.out.print(” b: ” +b); // Schleife 1 kann bei Programmende nicht weiter ausgeführt werden
}
System.out.println(“\nEnde Unterprogramm”); // Da das Programm bei einem Wert a==2 beendetwird, wird diese Stelle nie erreicht.
}
}
Die Ausgabe ist demnach
Start im Hauptprogramm:
Start Unterprogramm:
a: 0
a: 1
a: 2
Mit return innerhalb einer for-Schleife wird sofort ins Hauptprogramm zurückgekehrt, eine Weiterführung der bestehenden Schleifen oder des Unterprogrammes generell findet nicht statt.
class Angestellter {
public static void main(String args[]) {
System.out.println(“Start im Hauptprogramm: “);
Buchhalter.forSchleife(); // Aufruf der statischen Methode “forSchleife()” von Buchhalter.
System.out.println( “Ende des Hauptprogrammes”);
}
}
class Buchhalter extends Angestellter {
public static void forSchleife() {
System.out.println(“Start Unterprogramm: “);
for (int b=0; b<3; b++) { // Schleife 1
for (int a=0; a < 10; ++a){ // Schleife 2
System.out.print(“\na: “+a);
if (a==2)
return; // Verlassen des Unterprogrammes, wenn a den Wert von 2 erreicht
}
System.out.print(” b: ” +b); // Schleife 1 wird bei return nicht weitergeführt
}
System.out.println(“\nEnde Unterprogramm”); // Da das Unterpgrogramm bei einem Wert a==2 verlassen wird, wird diese Stelle nie erreicht.
}
}
Die Ausgabe ist demnach
Start im Hauptprogramm:
Start Unterprogramm:
a: 0
a: 1
a: 2Ende des Hauptprogrammes
Mit break springt man aus der aktuellen Schleife, alles arbeitet wie spezifiziert weiter:
class Angestellter {
public static void main(String args[]) {
System.out.println(“Start im Hauptprogramm: “);
Buchhalter.forSchleife(); // Aufruf der statischen Methode “forSchleife()” von Buchhalter.
System.out.println( ”Ende des Hauptprogrammes”);
}
}
class Buchhalter extends Angestellter {
public static void forSchleife() {
System.out.println(“Start Unterprogramm: “);
for (int b=0; b<3; b++) { // Schleife 1
for (int a=0; a < 10; ++a){ // Schleife 2
System.out.print(“\na: “+a);
if (a==2)
break; // Abbruch von Schleife 2 wenn a den Wert 2 erreicht
} // Wenn “break” greift, wird auch a nicht mehr (wie üblich) hochgezählt
System.out.print(” b: ” +b); // Die erste Schleife wird weitergeführt
}
System.out.println(“\nEnde Unterprogramm”);
}
}
Die Ausgabe ist demnach:
Start im Hauptprogramm:
Start Unterprogramm:
a: 0
a: 1
a: 2 b: 0
a: 0
a: 1
a: 2 b: 1
a: 0
a: 1
a: 2 b: 2
Ende Unterprogramm
Ende des Hauptprogrammes
Bei der Iteration innerhalb einer For-Schleife bitte beachten, dass sich der Wert erst ändert, wenn der Schleifen-Inhalt abgearbeitet wird:
for (int a=0; a < 1; a++){
System.out.println(a); // Ausgabe: 0
} // erst hier wird a um 1 hochgezählt
Die Ausgabe ändert sich auch nicht bei einer Vor-Inkrementierung:
for (int a=0; a < 1; ++a){
System.out.println(a); // Ausgabe ist ebenfalls 0
} // Auch hier wird ebenfalls erst um 1 hochgezählt
Auch sind mehrere Iterationen möglich, die durch Komma getrennt werden:
for (int a=0, b=0; a < 1; a++, b++){ … }
Grundsätzlich sind verschachtelte Bedingungen möglich:
int b=5;
for (int a = 0; a < 10 && b < 8; a++){
System.out.println(a);
b++;
}
Es handelt sich im Endeffekt um einen boolean-Wert, der zurückgegeben wird, da beide Bedingungen mit && verknüpft sind. Mehrfache Bedingungen wie z.B.
for (int a = 0; a < 10 , b < 8; a++) { }
sind nicht möglich
Hier eine Tücke der Initialisierung innerhalb der for-Schleife
for ( int a = 1, b = 5; a <= b; a++ ) { }
compiliert problemlos, während
for ( int a = 1, int b = 5; a <= b; a++ ) { }
zu einem Compilerfehler führt. Dies hängt damit zusammen, dass wie bei Deklarationen von mehreren Variablen des selben Typs üblich diese nur durch ein Komma getrennt werden.
Ebenfalls zu einem Compilerfehler führt:
int b;
for ( int a = 1, b = 5; a <= b; a++ ) { }
während
int b=5;
for ( int a = 1; a <= b; a++ ) { }
einwandfrei compiliert.
Eine For-Schleife besteht ja grundsätzlich aus den folgenden Teilen:
for (<Initialisierung>;<Bedingung>;<Iteration>) { Schleifen-Inhalt }
Bitte in diesem Zusammenhang noch beachten, dass innerhalb von Schleifen deklarierte Variablen außerhalb nicht mehr erreichbar sind:
for (int a = 0; a < 10; i++){
int b =10;
}
System.out.println(a); // Compiler-Fehler
System.out.println(b); // Compiler-Fehler