es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No puedo entender por qué el break no está funcionando.

Estoy tratando de escribir una función que verifique si hay duplicados dentro de un arreglo. Una vez que la función detecte un duplicado, quiero que salga del bucle y devuelva un tipo específico. Sin embargo, en mi caso, sigue iterando como si la instrucción “break” no existiera. ¿Alguien puede explicarme por qué está sucediendo esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la que la declaración ‘break’ no parece funcionar como se pretende es porque solo rompe el bucle for interno y no el bucle for externo. En la implementación actual, una vez que se encuentra un duplicado, establece la variable booleana “type” en true y sale del bucle interno. Sin embargo, luego continúa iterando a través del bucle externo hasta que alcanza el final del arreglo.

    Para solucionar este problema, puedes usar una etiqueta para salir de ambos bucles al mismo tiempo. Aquí tienes un ejemplo:

    public static boolean hasDuplicates(int[] nums) {
        boolean type = false;
        outer:
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = i + 1; j <= nums.length - 1; j++) {
                if (nums[i] == nums[j]) {
                    type = true;
                    break outer;
                }
            }
        }
        return type;
    }
    

    En esta función modificada, usamos la etiqueta “outer” para marcar el bucle for externo. Cuando se encuentra un duplicado, la declaración ‘break’ ahora se refiere a la etiqueta “outer” y rompe ambos bucles for a la vez, deteniendo completamente la iteración.

Comments are closed.