salir romper for como ciclo anidados anidado java loops break nested-loops

java - romper - Cómo salir de dos bucles anidados



java como salir de un for (6)

Elemental, querido Watson ...

int points = 0; int goal = 100; while (goal <= 100) { for (int i = 0; i < goal; i++) { if (points > 50) { goal++; break; } points += i; } }

o

int points = 0; int goalim = goal = 100; while (goal <= goalim) { for (int i = 0; i < goal; i++) { if (points > 50) { goal = goalim + 1; break; } points += i; } }

Esta pregunta ya tiene una respuesta aquí:

He estado usando Java por bastante tiempo, sin embargo, mi educación en bucles es algo que falta. Sé cómo crear cada ciclo que existe en Java y también romper los bucles. Sin embargo, recientemente he pensado sobre esto:

Digamos que tengo dos bucles anidados. ¿Podría salir de ambos bucles usando solo una declaración de break ?

Esto es lo que tengo hasta ahora.

int points = 0; int goal = 100; while (goal <= 100) { for (int i = 0; i < goal; i++) { if (points > 50) { break; //for loop ends, while loop does not } //I know I could put a ''break'' statement here and end the while loop but I want to do it using just one ''break'' statement points += i; } }

¿Hay alguna forma de lograr esto?


En Java, puede usar una etiqueta para especificar qué ciclo romper / continuar:

mainLoop: while (goal <= 100) { for (int i = 0; i < goal; i++) { if (points > 50) { break mainLoop; } points += i; } }


Hay muchas maneras de despellejar a este gato. Aquí hay uno:

int points = 0; int goal = 100; boolean finished = false; while (goal <= 100 && !finished) { for (int i = 0; i < goal; i++) { if (points > 50) { finished = true; break; } points += i; } }

Actualización : Wow, no sabía sobre romper con las etiquetas. Esa parece una mejor solución.


No deberías usar etiquetas en el lenguaje objetivo. Necesita volver a escribir para la condición / while.

Entonces tu código debería verse así:

int points = 0; int goal = 100; while (goal <= 100 && points <= 50) { for (int i = 0; i < goal && points <= 50; i++) { points += i; } } // now points are 55


Puede restablecer las variables de control de bucle.

int points = 0; int goal = 100; while (goal <= 100) { for (int i = 0; i < goal; i++) { if (points > 50) { i = goal = 101; } points += i; } }


Sí, puede escribir break con etiqueta, por ejemplo:

int points = 0; int goal = 100; someLabel: while (goal <= 100) { for (int i = 0; i < goal; i++) { if (points > 50) { break someLabel; } points += i; } } // you are going here after break someLabel;