2082 Stimmen

Wie kann ich in Java aus verschachtelten Schleifen ausbrechen?

Ich habe ein verschachteltes Schleifenkonstrukt wie dieses:

for (Type type : types) {
    for (Type t : types2) {
         if (some condition) {
             // Do something and break...
             break; // Breaks out of the inner loop
         }
    }
}

Wie kann ich nun aus beiden Schleifen ausbrechen? Ich habe mir ähnliche Fragen angesehen, aber keine davon betrifft speziell Java. Ich konnte diese Lösungen nicht anwenden, weil die meisten gotos verwendeten.

Ich möchte die innere Schleife nicht in eine andere Methode einfügen.

Ich möchte die Schleifen nicht zurückgeben. Beim Abbrechen bin ich mit der Ausführung des Schleifenblocks fertig.

46voto

Fortega Punkte 19063

Verwenden Sie eine Funktion:

public void doSomething(List<Type> types, List<Type> types2){
  for(Type t1 : types){
    for (Type t : types2) {
      if (some condition) {
         // Do something and return...
         return;
      }
    }
  }
}

24voto

Miguel Ping Punkte 17786

Sie können eine temporäre Variable verwenden:

boolean outerBreak = false;
for (Type type : types) {
   if(outerBreak) break;
    for (Type t : types2) {
         if (some condition) {
             // Do something and break...
             outerBreak = true;
             break; // Breaks out of the inner loop
         }
    }
}

Je nach Funktion können Sie die innere Schleife auch verlassen oder zurückkehren:

for (Type type : types) {
    for (Type t : types2) {
         if (some condition) {
             // Do something and break...
             return;
         }
    }
}

22voto

RusJ Punkte 534

Die Verwendung des Schlüsselworts "break" allein ist nicht geeignet, wenn Sie mehr als eine Schleife verlassen müssen. Sie können sofort aus einer Schleife aussteigen Es spielt keine Rolle, von wie vielen Schleifen Ihre Anweisung umgeben ist. Sie können 'break' mit einem Label verwenden! Hier habe ich das Label "abc" verwendet. Sie können Ihren Code wie folgt schreiben, innerhalb einer beliebigen Funktion in Java

Dieser Code zeigt, wie man die äußerste Schleife verlässt

 abc: 
    for (int i = 0; i < 10; i++) { 
        for (int j = 0; j < 10; j++) { 
           for (int k = 0; k < 10; k++) { 
              if (k == 1){
                 break abc;
              } 
        } 
    } 
}

Sie können auch die break-Anweisung verwenden, um eine beliebige Schleife in einer verschachtelten Schleife zu verlassen.

    for (int i = 0; i < 10; i++) { 
       abc:for (int j = 0; j < 10; j++) { 
           for (int k = 0; k < 10; k++) { 
              if (k == 1){
                 break abc;
              } 
        } 
    } 
}

Der folgende Code zeigt ein Beispiel für das Verlassen der innersten Schleife. Mit anderen Worten: Nach der Ausführung des folgenden Codes befinden Sie sich außerhalb der Schleife der Variablen "k" und noch innerhalb der Schleife der Variablen "j" und "i".

    for (int i = 0; i < 10; i++) { 
        for (int j = 0; j < 10; j++) { 
           for (int k = 0; k < 10; k++) { 
              if (k == 1){
                 break;
              } 
        } 
    } 
}

17voto

zord Punkte 4345

Wenn Sie das nicht mögen break s und goto s können Sie anstelle der for-in-Schleife eine "traditionelle" for-Schleife verwenden, mit einer zusätzlichen Abbruchbedingung:

int a, b;
bool abort = false;
for (a = 0; a < 10 && !abort; a++) {
    for (b = 0; b < 10 && !abort; b++) {
        if (condition) {
            doSomeThing();
            abort = true;
        }
    }
}

13voto

Ich musste etwas Ähnliches tun, aber ich habe mich entschieden, die erweiterte for-Schleife dafür nicht zu verwenden.

int s = type.size();
for (int i = 0; i < s; i++) {
    for (int j = 0; j < t.size(); j++) {
        if (condition) {
            // do stuff after which you want 
            // to completely break out of both loops
            s = 0; // enables the _main_ loop to terminate
            break;
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X