ejemplos ciclos bucles anidados java loops for-loop break labelled-break

java - ciclos - Quiebre en anidados para bucles



bucles anidados java (10)

¿Qué hay de usar un booleano al que llamas ''encontrado'' y usarlo así?

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

Posible duplicado:
¿Cómo separarse del bucle principal / externo en un bucle doble / anidado?

Tengo la siguiente situación:

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; } } } }

quiero

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

se realice una vez y luego salga del bucle interno y continúe con el for (int i ... loop. Así que usé un corte en mi código. Pero no estoy realmente seguro de si esto es correcto. ¿El descanso causa un descanso? ¿Para todos los bucles o solo para el segundo bucle?


Creo que puedes hacer una cosa más ...

para (int k = 0; k <stationen.length-1; k ++) {if (stationen [k] .reparatur == null) {schlepper.fliege (stationen [k] .x, stationen [k] .y, stationen [k] .z);

k = stationen.length + 1 ; } }


La declaración de interrupción termina el bucle de cierre o la instrucción de conmutación más cercana en la que aparece en muchos idiomas, pero puede intentarlo y estar seguro del 100%.


Sólo el segundo. Puedes usar "goto" por supuesto.


Sólo rompe el bucle interno, y por lo tanto hace lo que quieres. Para romper más de un nivel, en Java, puede usar un "salto etiquetado" así:

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; } } }

Pero normalmente no necesitarás esto.

Puedes considerar hacer un método separado para el bucle interno de todos modos; es algo a lo que puede darle un nombre ("find_available_station" o algo así), y probablemente lo necesite en algún otro lugar.

Además, tenga en cuenta que sus bucles en este momento perderán el último elemento de cada matriz. Piense detenidamente por qué está usando <en lugar de <=; es exactamente para que utilice todos los valores desde 0 hasta pero sin incluir el valor especificado.


Si necesita más control, puede utilizar un salto etiquetado. Más información here . Como han dicho otros, la ruptura cerrará el bucle más cercano.


coloque los dos bucles internos en una función y use la función de retorno para salir de ambos.


la ruptura causará ruptura solo para el bucle más cercano (segundo bucle)


break romperá el bucle más interno, en su caso, el segundo bucle.

Para hacer que se rompa el bucle externo, puede utilizar un salto etiquetado como:

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


break solo se rompe fuera del bucle más interno.