¿Por que no me funciona el do-while al validar una respuesta con equalsIgnoreCase?

publicado por: Anonymous

Quiero validar una respuesta en java con un metodo, pero ocurre algo conla condicion del do-while ya que no es capaz de salir del bucle.

    public static String siNo() {
    Scanner in =new Scanner(System.in);
    String respuesta;
    do {
        System.out.print(" > ");
        respuesta=in.next();
        System.out.println();
        System.out.println("Estoy detro del metodo  "+respuesta);
    } while (!respuesta.equalsIgnoreCase("S") || !respuesta.equalsIgnoreCase("N"));

    return respuesta;
}

}
introducir la descripción de la imagen aquí

solución

Hay varias cosas que han concurrido para que se haya hecho tremendo problema.

El primer factor es la elección mismo de do ... while, en cuyo caso se sale del bucle cuando la condición es false.

Luego, las evaluaciones al revés.

Solución 1: Si quieres que salga al escribir una S o una N sin importar que sean mayúscula o minúscula

    Scanner in = new Scanner(System.in);

    String respuesta;
    boolean bolStatus = true;
    do {
        System.out.print(" > ");
        respuesta = in.next();
        System.out.println();
        System.out.println("Estoy detro del metodo  " + respuesta);
        bolStatus = (respuesta.equalsIgnoreCase("S") || respuesta.equalsIgnoreCase("N"));
        System.out.println(bolStatus);

    } while (!bolStatus);

    /*Cerrar scanner*/
    in.close();

Prueba:

debug:
 > e

Estoy detro del metodo  e
false
 > d

Estoy detro del metodo  d
false
 > s

Estoy detro del metodo  s
true
BUILD SUCCESSFUL (total time: 7 seconds)

Solución 2: si quieres lo contrario

Sólo le quitas el ! a la evaluación del while:

    Scanner in = new Scanner(System.in);

    String respuesta;
    boolean bolStatus = true;
    do {
        System.out.print(" > ");
        respuesta = in.next();
        System.out.println();
        System.out.println("Estoy detro del metodo  " + respuesta);
        bolStatus = (respuesta.equalsIgnoreCase("S") || respuesta.equalsIgnoreCase("N"));
        System.out.println(bolStatus);

    } while (bolStatus);

    /*Cerrar scanner*/
    in.close();

Prueba:

debug:
 > s

Estoy detro del metodo  s
true
 >  n

Estoy detro del metodo  n
true
 > N

Estoy detro del metodo  N
true
 > S

Estoy detro del metodo  S
true
 > P

Estoy detro del metodo  P
false
BUILD SUCCESSFUL (total time: 14 seconds)
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *