Empecé a aprender Java hoy y decidí hacer un cuestionario de opción múltiple. El problema con el que me he encontrado es que la entrada del usuario se atasca en un bucle, incluso si es una de las opciones correctas "a" o "b". Este es mi código:

    Scanner input = new Scanner(System.in);

    String answer = input.nextLine();

    while(!answer.equals("a") || !answer.equals("b")) {
        System.out.println("Please enter one of the correct choices");
        answer = input.nextLine();
    } 

¿Alguien puede decirme qué estoy haciendo mal aquí?

Gracias

-1
tirth96 9 sep. 2018 a las 03:03

3 respuestas

La mejor respuesta

El error está en el uso de OR operator ("||") en sus condiciones de bucle while. Si bien estas condiciones son verdaderas, su ciclo seguirá ejecutándose. Como está verificando si la entrada del usuario es diferente a "a" o diferente a "b", la condición siempre será verdadera, porque la entrada no puede ser "a" y "b" en al mismo tiempo.

Debería usar AND operator ("&&") en este caso. Vea abajo:

while(!answer.equals("a") && !answer.equals("b")) {

Esto devolverá verdadero (y, por lo tanto, seguirá ejecutando el bucle) si la entrada es, al mismo tiempo, diferente de "a" y diferente de "b".

Editar:

Alerra también propuso una forma muy interesante de lograr lo mismo que se muestra arriba. Vea abajo:

while(!(answer.equals("a") || !answer.equals("b"))) {
0
Talendar 9 sep. 2018 a las 00:37
while(!(answer.equals("a") || !answer.equals("b")))

Puede usar la tabla de verdad de OR para pensar en esta pregunta:

True True = True
True False = True
False True = True
False False = False

Entonces, si el usuario no responde A y B, desea mantener el ciclo while ejecutándose, invertir el False, para que el ciclo continúe. Si el usuario responde cualquiera de A y B, se romperá el ciclo.

Tabla de verdad inversa O:

True True = False
True False = False
False True = False
False False = True
0
Angus Tay 9 sep. 2018 a las 00:50

El problema es con el || operador, si la respuesta es A, entonces no es B inversamente, si es B, entonces no es A

0
Sr.up 9 sep. 2018 a las 00:11