¿Cómo salgo de los bucles anidados en Java?

2 minutos de lectura

¿Como salgo de los bucles anidados en Java
boutta

Tengo una construcción de bucle anidado como esta:

for (Type type : types) {
    for (Type t : types2) {
         if (some condition) {
             // Do something and break...
             break; // Breaks out of the inner loop
         }
    }
}

Ahora, ¿cómo puedo salir de ambos bucles? He analizado preguntas similares, pero ninguna se refiere específicamente a Java. No pude aplicar estas soluciones porque la mayoría usaba gotos.

No quiero poner el bucle interno en un método diferente.

No quiero devolver los bucles. Al romper he terminado con la ejecución del bloque de bucle.

1646972946 913 ¿Como salgo de los bucles anidados en Java
Zo72

Técnicamente, la respuesta correcta es etiquetar el bucle exterior. En la práctica, si desea salir en cualquier punto dentro de un ciclo interno, sería mejor externalizar el código en un método (un método estático si es necesario) y luego llamarlo.

Eso valdría la pena por la legibilidad.

El código se convertiría en algo así:

private static String search(...) 
{
    for (Type type : types) {
        for (Type t : types2) {
            if (some condition) {
                // Do something and break...
                return search;
            }
        }
    }
    return null; 
}

Coincidencia del ejemplo para la respuesta aceptada:

 public class Test {
    public static void main(String[] args) {
        loop();
        System.out.println("Done");
    }

    public static void loop() {
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i * j > 6) {
                    System.out.println("Breaking");
                    return;
                }
                System.out.println(i + " " + j);
            }
        }
    }
}

  • A veces usa varias variables locales que están fuera del ciclo interno, pasarlas todas puede parecer torpe.

    – Haoest

    7 de diciembre de 2011 a las 1:15

  • No necesita crear un nuevo bloque para usar una etiqueta.

    – Jon Skeet

    20 de mayo de 2009 a las 9:13

  • No, pero hace que la intención sea mucho más clara. Vea el primer comentario sobre la respuesta aceptada.

    – bomba

    20 de mayo de 2009 a las 9:24

¿Como salgo de los bucles anidados en Java
elle mundy

Nunca uso etiquetas. Parece una mala práctica para entrar. Esto es lo que haría:

boolean finished = false;
for (int i = 0; i < 5 && !finished; i++) {
    for (int j = 0; j < 5; j++) {
        if (i * j > 6) {
            finished = true;
            break;
        }
    }
}

Compruebe si un objeto de clase es una subclase de
Neurona

Puedes usar etiquetas:

label1: 
for (int i = 0;;) {
    for (int g = 0;;) {
      break label1;
    }
}

1646972946 85 ¿Como salgo de los bucles anidados en Java
Pedro Mortensen

Usa una función:

public void doSomething(List<Type> types, List<Type> types2){
  for(Type t1 : types){
    for (Type t : types2) {
      if (some condition) {
         // Do something and return...
         return;
      }
    }
  }
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad