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í:
- Rompiendo bucles anidados en Java 30 respuestas
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;