Frage

  

Mögliche Duplizieren:
   Wie aus main / äußeren Schleife brechen in einem Doppel- / verschachtelte Schleife?

Ich habe die folgende Situation vor:

      for(int i = 0; i < schiffe.length-1; i++){
            if(schiffe[i].schaden){
                schlepper.fliege(schiffe[i].x, 
                                 schiffe[i].y, 
                                 schiffe[i].z);
                schlepper.wirdAbgeschleppt = schiffe[i];
                for(int k = 0; k < stationen.length-1; k++){
                    if(stationen[k].reparatur == null){
                        schlepper.fliege(stationen[k].x,
                                         stationen[k].y,
                                         stationen[k].z);
                        break;
                    }
                }
            }
        }

Ich will

schlepper.fliege(stationen[k].x,
                 stationen[k].y,
                 stationen[k].z);

einmal durchgeführt werden und dann von der inneren Schleife ausbrechen und fahren Sie mit dem für (int i ... Schleife. Verwenden Also ich eine Pause in meinem Code. Aber ich bin nicht wirklich sicher, ob dies richtig ist. Ist die Pause verursacht eine Pause für alle Schleifen oder nur für die zweite Schleife?

War es hilfreich?

Lösung

Es bricht nur die innere Schleife, und daher tut, was Sie wollen. Zu brechen mehr als eine Ebene, in Java, können Sie ein "markiertes break" wie so verwenden:

schiffe_loop:
for(int i = 0; i < schiffe.length-1; i++){
    some_stuff();
    for(int k = 0; k < stationen.length-1; k++){
        if (something_really_bad_happened()) {
            break schiffe_loop;
        }
    }
}

Aber in der Regel werden Sie dies nicht benötigen.

Sie können prüfen, ohnehin ein separates Verfahren für die innere Schleife zu machen; es ist etwas, das man leicht einen Namen ( „find_available_station“ oder so ähnlich) geben, und wird wahrscheinlich woanders brauchen.

Auch, bitte beachten Sie, dass Ihre Loops jetzt wird das letzte Element jedes Arrays verpassen. Überlegen Sie genau, warum Sie verwenden , aber nicht einschließlich die angegebenen ein.

Andere Tipps

break wird die innerste Schleife brechen, in Ihrem Fall 2. Schleife.

Um es die äußere Schleife machen brechen Sie eine markierte Pause verwenden können wie:

OUTER:for(...) {
         for(...) {
            break OUTER;
         }
      }

break bricht nur von der innersten Schleife aus.

Bruch verursacht Pause für nächste Schleife nur (zweite Schleife)

Nur die zweite. Sie können "goto" natürlich nutzen.

Break-Anweisung beendet die nächste einschließende Schleife oder switch-Anweisung, in der sie in vielen Sprachen erscheint, aber Sie können es versuchen, und sicher 100% sein.

setzen die inneren zwei Schleifen in einer Funktion und Verwendung Rückkehr der beiden von ihnen auszubrechen.

Wenn Sie mehr Kontrolle benötigen, können Sie einen markierten Pause verwenden. Weitere Informationen hier . Wie andere gesagt haben, brechen die nächste Schleife schließen.

Was ist mit einem boolean Sie rufen ‚gefunden‘ und verwenden Sie es wie folgt aus:

while(!found) {
    for(...) {
        //todo
    }
}

Ich denke, man kann man tun More Thing ..

for (int k = 0; k

                   k =  stationen.length + 1 ;

                }
            }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top