System.out.println("0");
System.out.println("2");
System.out.println("4");
System.out.println("6");
System.out.println("8");
System.out.println("10");
Aufgabe:
Gib alle geraden Zahlen zwischen 0 und 10 einschließlich aus.
Mögliche Lösung:
System.out.println("0"); System.out.println("2"); System.out.println("4"); System.out.println("6"); System.out.println("8"); System.out.println("10");
Java
Es handelt sich hierbei zwar um eine Lösung, allerdings könnte man für diese Vorgehensweise genauso eine Textverarbeitung für die Ausgabe wählen, der Aufwand wäre dann sogar etwas geringer.
Spätestens aber, wenn man alle geraden Zahlen zwischen 0 und 1000 einschließlich ausgeben will, wird niemand die Aufgabe wie in der dargestellten Lösung beantworten.
Zu diesem Zweck gibt es die for-Schleife, die dazu da ist, Anweisungen zu wiederholen.
Die for-Schleife wird am einfachsten anhand eines Beispiels erklärt, das tatsächlich die geraden Zahlen zwischen 0 und 10 einschließlich ausgibt.
for (int i=0; i<=10; i++){ (1) if (i%2==0){ (2) System.out.println(i); (3) } } (4)
1 | Kopf der for-Schleife |
2 | Überprüfung auf die Eigenschaft "Zahl gerade" mit Modulo ("Teilbarkeit durch 2 wahr?") |
3 | Ausgabe der Zahl. |
4 | Hier endet die for-Schleife, d.h. alle Anweisungen bis hierher werden wiederholt. |
Sehen wir uns den Kopf der for-Schleife genauer an: Dieser besteht aus drei Abschnitten, die untereinander durch Strichpunkte getrennt sind.
int i=0
führt die Integer-Variable i ein, die mit dem Wert 0 initialisiert wird. Sie wird auch als Laufvariable bezeichnet.
i < = 10
ist die Bedingung, die vor jedem Durchlauf auf Wahrheit überprüft wird. Sobald diese Bedingung nicht mehr erfüllt ist, wird die for-Schleife verlassen und der Code hinter der for-Schleife wird ausgeführt.
i++
erhöht den Wert von i nach jedem Durchlauf um 1
Da der Wert von i nach jedem Durchlauf um 1 erhöht wird, läuft die Schleife folgendermaßen ab:
|
Ist |
0 |
wahr |
1 |
wahr |
2 |
wahr |
3 |
wahr |
4 |
wahr |
5 |
wahr |
6 |
wahr |
7 |
wahr |
8 |
wahr |
9 |
wahr |
10 |
wahr |
11 |
falsch |
Sobald also i
den Wert 11 annimmt, ist die Bedingung i < = 10
zum wiederholten Durchlaufen der Schleife nicht mehr erfüllt und der Code hinter der for-Schleife wird als nächstes ausgeführt.
Beachte, dass Dahinter ist sie wieder unbekannt und der Buchstabe for (int i=0; i<=10; i++){ System.out.println(i); (1) } (2) System.out.println(i); (3)
|
Natürlich muss i
zu Beginn nicht auf 0 gesetzt werden, man könnte auch schon bei 4 starten und nur bis 8 laufen lassen:
for (int i=4; i<=8; i++){ if (i%2==0){ System.out.println(""+i); } }
Java
Auch der letzte Abschnitt muss nicht immer nur um 1 erhöhen. Man könnte das ganze Programm vereinfachen, indem man bei 0 startet und die Zahlen in Zweierschritten durchläuft:
for (int i=0; i<=10; i+=2){ (1) System.out.println(i); }
1 | Statt i+=2 könnte man auch i=i+2 schreiben, was einer Erhöhung um 2 entspricht. |
Ebenso kann man eine for-Schleife abwärts zählen lassen, indem man statt i++
den Ausdruck i--
verwendet. So könnte man einen Countdown umsetzen.
for (int i=10; i>=0; i--){ (1) System.out.println(i); System.out.println(i); }
1 | Beachte, dass neben dem Startwert auch noch die Bedingung für den nächsten Schleifendurchlauf angepasst werden muss! |
Will man beispielsweise das kleine Einmaleins tabellarisch ausgeben, so gelingt das mit zwei ineinander verschachtelten Schleifen:
for (int i=1; i<=10; i++){ (1) for (int j=1; j<=10; j++){ (2) System.out.print(i*j+"\t"); (3) } System.out.println(""); (4) }
1 | Äußere Schleife für die einzelnen Zeilen (Laufvariable i ) |
2 | Innere Schleifen für die Spalten (Laufvariable j ) |
3 | print und nicht println : dadurch kein Zeilenvorschub nach der Ausgabe. Das \t fügt einen Tabulator ein, damit die Ausgabe besser aussieht. |
4 | Dieses println wird nach der Ausgabe einer kompletten Zeile aufgerufen und fügt einen Zeilenvorschub ein, springt also in die nächste Zeile. |
Die innerer Schleife läuft pro Einzelschritt der äußeren Schleife jeweils 10 Mal durch.
Die Ausgabe sieht folgendermaßen aus:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
System.out.println("0"); System.out.println("2"); System.out.println("4"); System.out.println("6"); System.out.println("8"); System.out.println("10");
Java
for (int i=0; i<=10; i++){ if (i%2==0){ System.out.println(i); } }
Java
for (int i=4; i<=8; i++){ if (i%2==0){ System.out.println(""+i); } }
Java
for (int i=0; i<=10; i+=2){ System.out.println(i); }
Java
for (int i=10; i>=0; i--){ System.out.println(i); }
Java
for (int i=1; i<=10; i++){ for (int j=1; j<=10; j++){ System.out.print(i*j+"\t"); } System.out.println(""); }
Java
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100