Verschachtelte Schleifen in Java
In diesem Java Tutorial lernst du, wie du Schleifen verschachteln kannst, und wie du herausfindest, welche innen oder außen sein sollte.Tags: DO-WHILE-Schleife | FOR-Schleife | Java | Programmieren lernen | Schleifen | WHILE-SchleifeWorum geht´s?
In diesem Java-Tutorial geht es um verschachtelte Schleifen – also Schleifen, die sich innerhalb anderer Schleifen befinden.
1. Welche Schleifen lassen sich in Java verschachteln?
Die gute Nachricht: alle.
Das bedeutet: Du kannst eine while-Schleife in eine andere while-Schleife packen, ebenso eine do-while-Schleife in eine for-Schleife, usw. – der Fantasie sind dabei keine Grenzen gesetzt.
Du kannst auch so Verschachtelungen vornehmen, wie du willst – es ist also durchaus möglich, etwa so etwas zu machen:
public class HelloWorld { public static void main(String[] args) { for (int a = 1; a <= 5; a++) { for (int b = 1; b <= 5; b++) { for (int c = 1; c <= 5; c++) { System.out.println("Yehaa"); } } } } }
Die obige Schleife würde etwa 5 ^3, also 125 Mal, „Yehaa“ ausgeben.
Nicht sehr sinnvoll, aber durchaus möglich.
2. Eine Uhr mit Schleifen in Java nachbauen
Ein etwas sinnvollereres Beispiel wäre es etwa, einen Uhr nachzubauen.
2.1 Der „Sekundenzeiger“ der Uhr
Beginnen wir mit dem Sekunden-Zeiger, der sich von 1-60 bewegen soll:
public class HelloWorld { public static void main(String[] args) { for (int sekunden = 1; sekunden <= 60; sekunden++) { System.out.println(":" + sekunden); } } }
Das obige Programm würde 60 Mal ausgeben, bei welcher Sekunde wir gerade sind, und zwar im Format „:35“.
2.2 Der „Minutenzeiger“ der Uhr
Wenn eine Minute um ist (also 60 Sekunden vergangen sind), sollte der Minutenzeiger sich um 1 verschieben.
Damit das passiert, brauchen wir eine weitere Schleife, die die Minuten von 1-60 zählt.
Aber welche der beiden Schleifen soll nun in die andere?
Da für jeden Durchlauf der äußeren Schleife die innere Schleife ganz durchläuft, macht es mehr Sinn, die Sekunden zur inneren Schleife zu machen. Für jede Minute (1 Durchgang der äußeren Schleife) läuft die innere Schleife damit 60 Mal (eben unsere Sekunden).
Außerdem können wir noch gleich ein Problem lösen: Normalerweise wird auf einer Uhr ja nicht 60 angezeigt, sondern 0, unsere Uhr sollte also nicht von 1-60 laufen, sondern von 0-59. Das können wir leicht einbauen:
public class HelloWorld { public static void main(String[] args) { for (int minuten = 0; minuten <= 59; minuten++) { for (int sekunden = 0; sekunden <= 59; sekunden++) { System.out.println(minuten + ":" + sekunden); } } } }
2.3 Der „Stundenzeiger“ der Uhr
Wenn 60 Minuten vorbei sind, soll sich die Stunde um 1 erhöhen, von 0 bis 23.
Auch hier muss die Schleife für die Stunden (weil die sich seltener verändern als die Minuten, und viel seltener als die Sekunden) außen rund um die vorherigen zwei Schleifen:
2.4 Mehrere „Tage“ der Uhr
Wollen wir nun z.B. mehrere Tage, also z.B. die 7 Tage der Woche, so können wir wieder eine Schleife rundherum packen:
public class HelloWorld { public static void main(String[] args) { for (int tage = 0; tage <= 6; tage++) { for (int stunden = 0; stunden <= 23; stunden++) { for (int minuten = 0; minuten <= 59; minuten++) { for (int sekunden = 0; sekunden <= 59; sekunden++) { System.out.println("Tag " + tage + ", " + stunden + ":" + minuten + ":" + sekunden); } } } } } }
Die Schleifen geben also jeden möglichen Zeitpunkt innerhalb einer Woche aus.
2.5 Die Uhr im Sekundentakt „ticken“ lassen mit Thread.sleep()
Weil eine Uhr nur dann eine richtige Uhr ist, wenn sie auch „tickt“, hier noch eine Möglichkeit, dein Programm für eine Sekunde warten zu lassen.
Wie das alles genau funktioniert, wird in einem anderen Tutorial zu try und catch und Threads vorkommen – fürs erste kannst du den Teil einfach kopieren:
public class HelloWorld { public static void main(String[] args) { for (int tage = 0; tage <= 6; tage++) { for (int stunden = 0; stunden <= 23; stunden++) { for (int minuten = 0; minuten <= 59; minuten++) { for (int sekunden = 0; sekunden <= 59; sekunden++) { System.out.println("Tag " + tage + ", " + stunden + ":" + minuten + ":" + sekunden); try { Thread.sleep(1000); } catch (Exception e) { e.printStackTrace(); } } } } } } }
Natürlich wäre es nur dann eine wirklich sinnvolle Uhr, wenn sie auch die aktuelle Zeit anzeigt – aber da wirds jetzt recht schnell kompliziert, weswegen wir das auf ein anderes Tutorial verschieben.
Fürs erste ist für dich das Wichtigste, dass Schleifen, die sich langsamer „bewegen“, in der Verschachtelung weiter außen sind.
Tick. Tick. Tick.
Macht Spaß 🙂