Pausa in cicli for innestati [duplicato]
-
30-09-2019 - |
Domanda
Eventuali duplicati:
Come pausa dal ciclo principale / esterno in un ciclo doppia / annidato?
Ho la seguente situazione:
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;
}
}
}
}
Voglio
schlepper.fliege(stationen[k].x,
stationen[k].y,
stationen[k].z);
essere eseguita una sola volta e poi rompere fuori dal ciclo interno e continuare con il for (int i ... loop. Così ho usato una pausa nel mio codice. Ma io non sono veramente sicuro se questo è giusto. Fa la pausa causare una pausa per tutti i loop o solo per il secondo ciclo?
Soluzione
Si rompe solo il ciclo interno, e fa quindi ciò che si desidera. Per rompere più di un livello, in Java, è possibile utilizzare una "pausa etichetta" in questo modo:
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;
}
}
}
Ma di solito non avrete bisogno di questo.
Si può considerare la possibilità di un metodo separato per il ciclo interno in ogni caso; E 'qualcosa che si può facilmente dare un nome a ( "find_available_station" o qualcosa di simile), e probabilmente bisogno di qualche altra parte.
Inoltre, si prega di essere consapevole del fatto che i loop in questo momento mancherà l'ultimo elemento di ciascun array. Riflettere attentamente sul perché si sta utilizzando
Altri suggerimenti
break
romperà il ciclo più interno, nel tuo caso 2 ° ciclo.
Per rendere rompere il ciclo esterno è possibile utilizzare una pausa etichettato come:
OUTER:for(...) {
for(...) {
break OUTER;
}
}
break
rompe solo ciclo più interno.
rottura causerà pausa per ciclo vicini solo (secondo occhiello)
Proprio la seconda. È possibile utilizzare "goto", naturalmente.
dichiarazione break termina il ciclo racchiude più vicino o un'istruzione switch in cui appare in molte lingue, ma si può provare ed essere sicuri al 100%.
inserisce i due anelli interni in un ritorno funzione e l'utilizzo di uscire di entrambi.
Se avete bisogno di un maggiore controllo, è possibile utilizzare una pausa etichettati. Maggiori informazioni qui . Come altri hanno detto, pausa chiuderà l'anello più vicino.
Cosa succede ad usare un valore booleano che chiamate 'trovato' e usarlo in questo modo:
while(!found) {
for(...) {
//todo
}
}
I Think You Can Do One More Thing ..
for (int k = 0; k k = stationen.length + 1 ;
}
}