simple - salir del ciclo for en java
¿Cómo romper el bucle principal/externo en un bucle doble/anidado? (6)
Mejores y fáciles métodos para principiantes incluso
outerloop:
for(int i=0; i<10; i++){
// here we can break Outer loop by
break outerloop;
innerloop:
for(int i=0; i<10; i++){
// here we can break innerloop by
break innerloop;
}
}
Esta pregunta ya tiene una respuesta aquí:
- Rompiendo bucles anidados en Java 30 respuestas
Si tengo un bucle en un bucle y una vez si la declaración está satisfecha quiero romper el bucle principal, ¿cómo se supone que voy a hacer eso?
Este es mi código:
for(int d = 0; d < amountOfNeighbors; d++){
for(int c = 0; c < myArray.size(); c++){
if(graph.isEdge(listOfNeighbors.get(d), c)){
if(keyFromValue(c).equals(goalWord)){ // once this is true I want to break main loop.
System.out.println("We got to GOAL! It is "+ keyFromValue(c));
break; // this breaks second loop not main one.
}
}
}
}
Parece que para Java un break etiquetado parece ser el camino a seguir (basado en el consenso de las otras respuestas).
Pero para muchos (¿la mayoría?) Otros idiomas, o si desea evitar un flujo de control tipo goto
, debe establecer un indicador:
bool breakMainLoop = false;
for(){
for(){
if (some condition){
breakMainLoop = true;
break;
}
}
if (breakMainLoop) break;
}
Puede agregar etiquetas a su ciclo y usar ese labelled break
para salir del ciclo apropiado:
outer: for (...) {
inner: for(...) {
if (someCondition) {
break outer;
}
}
}
Vea estos enlaces para más información:
Puedes simplemente return
el control desde esa función. O utilice el enfoque de break labels
feas :) Si hay otras partes de código después de su declaración for, puede refactorizar los bucles en una función.
IMO el uso de descansos y continuar debe desalentarse en OOP, ya que afectan la legibilidad y el mantenimiento. Claro, hay casos en que son útiles, pero en general creo que debemos evitarlos, ya que fomentarán el uso de la programación de estilo goto.
Aparentemente las variaciones a estas preguntas se publican mucho, here Peter proporcionó algunos usos buenos y extraños usando etiquetas.
solo por diversión
for(int d = 0; d < amountOfNeighbors; d++){
for(int c = 0; c < myArray.size(); c++){
...
d=amountOfNeighbors;
break;
...
}
// no code here
}
comente en la break label
: es un avance, puede romper cualquier afirmación y pasar a la siguiente:
foo: // label the next statement (the block)
{
code ...
break foo; // goto [1]
code ...
}
//[1]
usando rotura etiquetada
mainloop:
for(){
for(){
if (some condition){
break mainloop;
}
}
}
Ver también