Aus verschachtelten Schleifen ausbrechen

1. Übersicht

In diesem Tutorial werden einige Beispiele erstellt, um verschiedene Möglichkeiten zur Verwendung von break innerhalb einer Schleife zu zeigen. Als nächstes werden wir auch sehen, wie man eine Schleife beendet, ohne überhaupt break zu verwenden.

2. Das Problem

Verschachtelte Schleifen sind beispielsweise sehr nützlich, um in einer Liste von Listen zu suchen.

Ein Beispiel wäre eine Liste von Studenten, wobei jeder Student eine Liste von geplanten Kursen hat. Angenommen, wir möchten den Namen einer Person finden, die Kurs 0 geplant hat .

Zuerst würden wir die Liste der Schüler durchlaufen. Dann würden wir innerhalb dieser Schleife die Liste der geplanten Kurse durchlaufen.

Wenn wir die Namen der Studenten und Kurse drucken, erhalten wir das folgende Ergebnis:

student 0 course 0 course 1 student 1 course 0 course 1

Wir wollten den ersten Studenten finden, der Kurs 0 geplant hat . Wenn wir jedoch nur Schleifen verwenden, sucht die Anwendung weiter, nachdem der Kurs gefunden wurde.

Nachdem wir eine Person gefunden haben, die den spezifischen Kurs geplant hat, möchten wir die Suche beenden. Die Fortsetzung der Suche würde mehr Zeit und Ressourcen in Anspruch nehmen, während wir die zusätzlichen Informationen nicht benötigen. Deshalb wollen wir aus der verschachtelten Schleife ausbrechen .

3. Pause

Die erste Möglichkeit, eine verschachtelte Schleife zu verlassen, besteht darin, einfach die break- Anweisung zu verwenden:

String result = ""; for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { break; } } } return result;

Wir haben eine äußere und eine innere Schleife, beide Schleifen haben zwei Iterationen. Wenn der Zähler der inneren Schleife gleich 0 ist, führen wir den Befehl break aus . Wenn wir das Beispiel ausführen, wird das folgende Ergebnis angezeigt:

outer0inner0outer1inner0

Oder wir könnten den Code anpassen, um ihn besser lesbar zu machen:

outer 0 inner 0 outer 1 inner 0

Wollen wir das?

Fast wird die innere Schleife durch die break-Anweisung beendet, nachdem 0 gefunden wurde. Die äußere Schleife geht jedoch weiter, was wir nicht wollen. Wir möchten die Verarbeitung vollständig einstellen, sobald wir die Antwort haben.

4. Beschriftete Pause

Das vorherige Beispiel war ein Schritt in die richtige Richtung, aber wir müssen es ein wenig verbessern. Wir können das tun, indem wir eine beschriftete Pause verwenden :

String result = ""; myBreakLabel: for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { break myBreakLabel; } } } return result;

Eine markierte Unterbrechung beendet die äußere Schleife anstatt nur die innere Schleife. Dies erreichen wir, indem wir das myBreakLabel außerhalb der Schleife hinzufügen und die break-Anweisung ändern, um myBreakLabel zu stoppen . Nachdem wir das Beispiel ausgeführt haben, erhalten wir das folgende Ergebnis:

outer0inner0

Wir können es mit einigen Formatierungen etwas besser lesen:

outer 0 inner 0

Wenn wir uns das Ergebnis ansehen, können wir sehen, dass sowohl die innere als auch die äußere Schleife beendet sind, was wir erreichen wollten.

5. Zurück

Alternativ können wir auch die return- Anweisung verwenden, um das Ergebnis direkt zurückzugeben, wenn es gefunden wurde:

String result = ""; for (int outerCounter = 0; outerCounter < 2; outerCounter++) { result += "outer" + outerCounter; for (int innerCounter = 0; innerCounter < 2; innerCounter++) { result += "inner" + innerCounter; if (innerCounter == 0) { return result; } } } return "failed";

Das Label wird entfernt und die break- Anweisung durch eine return- Anweisung ersetzt.

Wenn wir den obigen Code ausführen, erhalten wir das gleiche Ergebnis wie für die beschriftete Unterbrechung. Beachten Sie, dass wir den Schleifenblock normalerweise in eine eigene Methode verschieben müssen, damit diese Strategie funktioniert.

6. Fazit

Wir haben uns gerade angesehen, was zu tun ist, wenn wir eine Schleife vorzeitig verlassen müssen, beispielsweise wenn wir das gesuchte Objekt gefunden haben. Das Schlüsselwort break ist hilfreich für einzelne Schleifen, und wir können beschriftete break s für verschachtelte Schleifen verwenden.

Alternativ können wir eine return- Anweisung verwenden. Durch die Verwendung von return wird der Code besser lesbar und weniger fehleranfällig, da wir nicht über den Unterschied zwischen unbeschrifteten und beschrifteten Unterbrechungen nachdenken müssen.

Schauen Sie sich den Code auf GitHub an.