El uso de retorno vs while (condición) métodos para romper los lazos

B.brown:

Estoy haciendo una pequeña pregunta google entrevista. Encontrar el par de números en un bucle que se suman al número dado. Me pareció que los números 2 y 6 que componen 8 por eso digo partido = true para que el bucle while se detiene, sin embargo, todavía continúa hasta que encuentra el segundo, que es de 6 y 2 sin embargo, esos números ya he encontrado justo a la inversa alrededor y yo esperaba mi bucle de romper como mi si los estados de los estados si hay alguna 2 números que dan la suma, partido = true, por lo tanto terminar el bucle, supongo que soy, aunque mal.

Sin embargo, si me deshago de la sentencia while y acabo de volver; una vez que se encuentra una coincidencia se rompe sin buscar el segundo partido (que yo quiero que).

¿Por qué está sucediendo esto, la lógica de ambos parece exactamente el mismo para mí.

Usando el tiempo (condición) Método

public class Main {

    public static void main(String[]args){
        int[] list = new int[]{1,2,1,1,1,6};
        boolean match = false;
        int sumNeeded = 8;



        while(!match){
            for(int i = 0; i < list.length; i ++){
                for(int j = (list.length -1); j >= 0; j --){
                    if(list[i] != list[j]){
                        if(list[i] + list[j] == sumNeeded){
                            System.out.println("The numbers are = " + list[i] + " & " + list[j]);
                            match = true;
                        }
                    }
                }
            }
        }
    }
}

Utilizando return


public class Main {

    public static void main(String[]args){
        int[] list = new int[]{1,2,1,1,1,6};
        int sumNeeded = 8;



        for(int i = 0; i < list.length; i ++){
            for(int j = (list.length -1); j >= 0; j --){
                if(list[i] != list[j]){
                    if(list[i] + list[j] == sumNeeded){
                        System.out.println("The numbers are = " + list[i] + " & " + list[j]);
                        return;
                    }
                }
            }
        }
    }
}

Chocolite:

En su aplicación bucle while, si la matriz no tiene el par deseado a todo lo que se traduciría en un bucle infinito. No hay necesidad de que la declaración mientras que en su solución.

Después de entrar en el bucle while, se mira para todos los pares posibles de la matriz y para verificar si su suma. Si es igual a la suma deseada, se hace el partido variable booleana como verdadero.

Pero, hasta la anidada para un bucle se ejecuta por completo (es decir, todos los posibles pares se comprueban) no comprobamos para el mientras condición. La totalidad de anidado para bucle se ejecuta en una iteración del bucle while. Entonces, la condición de bucle mientras se comprueba de nuevo.

Como por el final de la primera iteración del bucle while todos los posibles pares se contabilizan, no hay necesidad de un bucle while.

Por otra parte, hay otros errores lógicos en su aplicación. La aplicación correcta de fuerza bruta es la siguiente:

public class Main {

public static void main(String[]args){
    int[] list = new int[]{1,2,1,1,1,6};
    boolean match = false;
    int sumNeeded = 8;




    for(int i = 0; i < list.length; i ++){
       for(int j = (list.length -1); j > i; j --){
          if(list[i] + list[j] == sumNeeded){
             System.out.println("The numbers are = " + list[i] + " & " + list[j]);
             return;
          }
       }
    }
  }
}

El bucle interior-para se modifica para reducir el doble recuento de los pares no ordenadas. Cada vez que se encuentra una coincidencia y se imprime, se sale de la función.

También puede agregar una instrucción break dentro del bucle, mientras que en su aplicación inicial.

if(match == true) {
     break;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=372975&siteId=1
Recomendado
Clasificación