Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Código propuesto no funciona

Hola, En "Java Creando tu primera aplicación" "03. Controlando flujo de aplicación", sin embargo, al momento de ejecutarlo encuentro un erro. Cuando acierto en el quinto intento sale el mensaje Felicidades, adivinaste el número en " + intentos + " intentos! PERO tambien sale el mensaje "Lo siento, no conseguiste adivinar el número en 5 intentos. El número era " + numeroGenerado). Esto no debería pasar. Yo hice el problema usando for para evitar este inconveniente y si funciono. Podrían revisar el código que han propuesto, por favor, ya que me genera dudas.

He revisado el código que propusieron como solución:

public class JuegoDeAdivinacion { public static void main(String[] args) {

            Scanner lector = new Scanner(System.in);
            int numeroGenerado = new Random().nextInt(100); // genera un número aleatorio entre 0 y 100
            int intentos = 0;

            while (intentos < 5) {
                System.out.print("Introduzca un número entre 0 e 100: ");
                int numeroDelUsuario = lector.nextInt();
                intentos++;

                if (numeroDelUsuario == numeroGenerado) {
                    System.out.println("Felicidades, adivinaste el número en " + intentos + " intentos!");
                    break; // interrumpe el loop while
                } else if (numeroDelUsuario < numeroGenerado) {
                    System.out.println("El número que escribiste es menor al número generado.");
                } else {
                    System.out.println("El número que escribiste es mayor al número generado.");
                }
            }

            if (intentos == 5) {
                System.out.println("Lo siento, no conseguiste adivinar el número en 5 intentos. El número era " + numeroGenerado);
            }
        }
    }
1 respuesta

Hola Susan, espero que estés bien

Entiendo tu frustración con el código propuesto. El problema que estás experimentando se debe a la lógica de control de flujo después del bucle while. El mensaje "Lo siento, no conseguiste adivinar el número en 5 intentos" se imprime siempre que se alcancen los 5 intentos, sin verificar si el número fue adivinado antes de llegar a ese punto.

Para solucionar este problema, puedes modificar la condición que verifica si se deben mostrar las felicitaciones o el mensaje de no acierto.

Aquí tienes una forma de ajustar el código:

public class JuegoDeAdivinacion {
    public static void main(String[] args) {
        Scanner lector = new Scanner(System.in);
        int numeroGenerado = new Random().nextInt(100); // genera un número aleatorio entre 0 y 100
        int intentos = 0;
        boolean adivinado = false;

        while (intentos < 5) {
            System.out.print("Introduzca un número entre 0 e 100: ");
            int numeroDelUsuario = lector.nextInt();
            intentos++;

            if (numeroDelUsuario == numeroGenerado) {
                System.out.println("Felicidades, adivinaste el número en " + intentos + " intentos!");
                adivinado = true;
                break; // interrumpe el loop while
            } else if (numeroDelUsuario < numeroGenerado) {
                System.out.println("El número que escribiste es menor al número generado.");
            } else {
                System.out.println("El número que escribiste es mayor al número generado.");
            }
        }

        if (!adivinado) {
            System.out.println("Lo siento, no conseguiste adivinar el número en 5 intentos. El número era " + numeroGenerado);
        }
    }
}

La clave aquí es introducir una variable booleana adivinado que se establece en true cuando el usuario adivina correctamente el número. Luego, después del bucle, verificamos esta variable para decidir si mostrar el mensaje de no acierto.

Espero que esta solución te sea útil y que puedas continuar con tus estudios sin problemas. ¡Espero haber ayudado y buenos estudios!