Geschachtelte Schleifen ermöglichen es, eine Schleifenfolge innerhalb einer anderen auszuführen. Sie werden verwendet, wenn mehrdimensionale Strukturen, wie zum Beispiel zweidimensionale Arrays oder Kombinationen von Elementen, durchlaufen werden müssen. Die erste Schleife wird als äußere Schleife bezeichnet und die Schleife, die sich innerhalb befindet, als innere Schleife.
Die Notwendigkeit, mit geschachtelten Strukturen wie Matrizen oder Graphen zu arbeiten, führte zur Einführung von geschachtelten Schleifen. Programmiersprachen, einschließlich Java, unterstützen diesen Mechanismus von Anfang an, um Aufgaben zur Verarbeitung von Arrays, Graphen, Netzen usw. zu programmieren.
Die Verwendung von geschachtelten Schleifen kann zu hoher zeitlicher Komplexität führen, wenn die Anzahl der Iterationen nicht berücksichtigt wird. Oft treten Probleme mit der Lesbarkeit des Codes und Fehler bei der Indizierung auf. Falsche Verwendung führt zu mehrfacher Ausführung derselben Aktionen.
Beispielcode:
int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); }
Schlüsselpunkte:
Kann man beide Schleifen sofort mit break beenden?
Der normale break-Befehl beendet nur die innere Schleife. Um aus mehreren Schleifen sofort auszutreten, verwendet man Labels:
outer: for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (Bedingung) break outer; } }
Kann eine unendliche Schleife durch geschachtelte Schleifen entstehen?
Ja, wenn die Austrittsbedingung aus einer der Schleifen falsch implementiert ist, entsteht eine unendliche Schleife. Besonders häufig passiert dies bei Fehlern in der Initialisierung oder der Zählererhöhung.
Kann man die Variablen der äußeren Schleife aus der inneren ändern?
Ja, technisch kann man das tun, aber es verringert die Lesbarkeit stark und führt zu Fehlern. Es ist besser, dies zu vermeiden und die Arbeit jeder Schleife deutlich zu trennen.
Es wird ein zweidimensionales Array durchlaufen, aber überall wird i anstelle von j verwendet:
for (int i = 0; i < n; i++) { for (int i = 0; i < m; i++) {...} }
Vorteile:
Nachteile:
Es werden verschiedene Variablennamen verwendet:
for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) {...} }
Vorteile:
Nachteile: