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.

8voto

Hitendra Solanki Punkte 4671

Sie können alle Schleifen ohne Verwendung von label: und Flags abbrechen.

Es ist einfach eine schwierige Lösung.

Hier ist Bedingung1 die Bedingung, die zum Verlassen der Schleifen K und J verwendet wird. Und Bedingung2 ist die Bedingung, die zum Verlassen der Schleifen K, J und I verwendet wird.

Zum Beispiel:

public class BreakTesting {
    public static void main(String[] args) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                for (int k = 0; k < 9; k++) {
                    if (condition1) {
                        System.out.println("Breaking from Loop K and J");
                        k = 9;
                        j = 9;
                    }
                    if (condition2) {
                        System.out.println("Breaking from Loop K, J and I");
                        k = 9;
                        j = 9;
                        i = 9;
                    }
                }
            }
        }
        System.out.println("End of I , J , K");
    }
}

6voto

Etiketten verwenden.

INNER:for(int j = 0; j < numbers.length; j++) {
    System.out.println("Even number: " + i + ", break  from INNER label");
    break INNER;
}

Siehe dieser Artikel

6voto

Kiran Maniya Punkte 7004

Es ist ziemlich einfach zu benutzen label Sie können die äußere Schleife von der inneren Schleife trennen, indem Sie das Etikett verwenden, siehe das folgende Beispiel,

public class Breaking{
    public static void main(String[] args) {
        outerscope:
        for (int i=0; i < 5; i++) {
            for (int j=0; j < 5; j++) {
                if (condition) {
                    break outerscope;
                }
            }
        }
    }
}

Ein anderer Ansatz ist die Verwendung der Unterbrechungsvariable/des Unterbrechungskennzeichens, um die erforderliche Unterbrechung zu verfolgen. betrachten Sie das folgende Beispiel.

public class Breaking{ 
    public static void main(String[] args) {
        boolean isBreaking = false;
        for (int i=0; i < 5; i++) {
            for (int j=0; j < 5; j++) {
                if (condition) {
                    isBreaking = true;
                    break;
                }
            }
            if(isBreaking){
                break;
            }
        }
    }
}

Ich bevorzuge jedoch den ersten Ansatz.

5voto

Chit Khine Punkte 764

Wenn es innerhalb einer Funktion ist, warum geben Sie es nicht einfach zurück:

for (Type type : types) {
    for (Type t : types2) {
         if (some condition) {
            return value;
         }
    }
}

5voto

Panzercrisis Punkte 4435
boolean broken = false; // declared outside of the loop for efficiency
for (Type type : types) {
    for (Type t : types2) {
        if (some condition) {
            broken = true;
            break;
        }
    }

    if (broken) {
        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