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.

2voto

Ravindra HV Punkte 2422

Wenn es sich um eine neue Implementierung handelt, können Sie versuchen, die Logik als if-else_if-else-Anweisungen umzuschreiben.

while(keep_going) {

    if(keep_going && condition_one_holds) {
        // Code
    }
    if(keep_going && condition_two_holds) {
        // Code
    }
    if(keep_going && condition_three_holds) {
        // Code
    }
    if(keep_going && something_goes_really_bad) {
        keep_going=false;
    }
    if(keep_going && condition_four_holds) {
        // Code
    }
    if(keep_going && condition_five_holds) {
        // Code
    }
}

Andernfalls können Sie versuchen, ein Flag zu setzen, wenn diese spezielle Bedingung eingetreten ist, und in jeder Ihrer Schleifenbedingungen auf dieses Flag zu prüfen.

something_bad_has_happened = false;
while(something is true && !something_bad_has_happened){
    // Code, things happen
    while(something else && !something_bad_has_happened){
        // Lots of code, things happens
        if(something happened){
            -> Then control should be returned ->
            something_bad_has_happened=true;
            continue;
        }
    }
    if(something_bad_has_happened) { // The things below will not be executed
        continue;
    }

    // Other things may happen here as well, but they will not be executed
    //  once control is returned from the inner cycle.
}

HIER! Auch wenn eine einfache Unterbrechung nicht möglich ist, kann sie durch folgende Maßnahmen erreicht werden continue .

Wenn Sie einfach nur die Logik von einer Programmiersprache nach Java portieren und die Sache zum Laufen bringen wollen, können Sie versuchen, mit Etiketten .

2voto

Harsh Vardhan Punkte 101

Java hat keine goto-Funktion wie in C++. Aber trotzdem, goto ist ein reserviertes Schlüsselwort in Java. Vielleicht wird es in Zukunft implementiert. Die Antwort auf Ihre Frage lautet, dass es in Java etwas namens label gibt, auf das Sie eine continue y break Erklärung. Finden Sie den Code unten:

public static void main(String ...args) {
    outerLoop: for(int i=0;i<10;i++) {
    for(int j=10;j>0;j--) {
        System.out.println(i+" "+j);
        if(i==j) {
            System.out.println("Condition Fulfilled");
            break outerLoop;
        }
    }
    }
    System.out.println("Got out of the outer loop");
}

2voto

mtyson Punkte 7520

Wie @1800 INFORMATION vorschlägt, verwenden Sie die Bedingung, die die innere Schleife unterbricht, als Bedingung für die äußere Schleife:

boolean hasAccess = false;
for (int i = 0; i < x && hasAccess == false; i++){
    for (int j = 0; j < y; j++){
        if (condition == true){
            hasAccess = true;
            break;
        }
    }
}

1voto

astryk Punkte 1256
boolean condition = false;
for (Type type : types) {
    for (int i = 0; i < otherTypes.size && !condition; i ++) {
        condition = true; // If your condition is satisfied
    }
}

Utilice condition als Kennzeichen, wenn Sie mit der Verarbeitung fertig sind. Dann wird die innere Schleife nur fortgesetzt, solange die Bedingung nicht erfüllt ist. So oder so, die äußere Schleife wird weiterlaufen.

1voto

Dharmik Patel Punkte 41

Für einige Fälle können wir verwenden while Schleife effektiv zu nutzen.

Random rand = new Random();
// Just an example
for (int k = 0; k < 10; ++k) {
    int count = 0;
    while (!(rand.nextInt(200) == 100)) {
       count++;
    }

    results[k] = count;
}

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