Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Proyecto] Adivina el numero

Comparto el codigo, me llevo un rato, pero lo tengo, me indican sugerencias de como mejorar mas

import java.util.Random;
import java.util.Scanner;

public class tarea2 {

public static void main(String[] args) {
    System.out.println("Adivina el Numero");
    String reglas = """
            Debes adivinar un numero entre 0 y 100
            solo tendrás 5 oportunidades para lograrlo.
            Solo deben ser números Enteros y Positivos.
            Asi que manos a la obra y Juguemos""";
    System.out.println(reglas);
    int numRandom = new Random().nextInt(101);
  //  System.out.println(numRandom);
    int intentos = 0;
    boolean logro = false;
    Scanner teclado = new Scanner(System.in);

    for (int i = 0; i < 5; i++) {
        int numValido =-1;
        boolean entradaValida = false;

        while (!entradaValida){
            System.out.println("Ingresa un Numero entre 0 y 100");

            if (teclado.hasNextInt()){
                int num = teclado.nextInt();
                if (num >=0 && num <=100){
                    numValido =num;
                    entradaValida = true;
                }else {
                    System.out.println("El número debe estar entre 0 y 100");
                }
            }else {
                System.out.println("Ingresa Solo numeros enteros!!!");
                teclado.next();
            }
        }
        if (numValido == numRandom) {
            System.out.println("Has acertado al numero en " + (i + 1) + " intentos, Felicitaciones");
            logro = true;
            break;
        } else if (numValido > numRandom) {
            System.out.println("El numero es Menor");
        } else {
            System.out.println("El numero es Mayor");
        }
    }
    teclado.close();
    // Si llega aquí, es porque no adivinó en 5 intentos
    if (!logro) {
        System.out.println("Lo siento, no adivinaste. El número era: " + numRandom + "Para la Próxima");

    }
}

}

2 respuestas

¡Hola Alejandro, espero que estés bien!

Sugerencia: compartir tu proyecto en el canal #comparta-tu-codigo en el servidor ONE en Discord ;)

¡Qué bueno que compartiste tu código! Veo que ya tienes una buena base para tu juego de "Adivina el número". Aquí te dejo algunas sugerencias para mejorarlo:

  1. Comentarios: Aunque ya tienes algunos, añadir comentarios adicionales puede ayudar a otros (y a ti mismo en el futuro) a entender rápidamente qué hace cada parte del código.

  2. Uso de constantes: Puedes definir constantes para los valores que no cambian, como el número máximo de intentos o el rango del número aleatorio. Esto hace que el código sea más fácil de mantener. Por ejemplo:

    final int MAX_INTENTOS = 5;
    final int MAX_NUMERO = 100;
    
  3. Mensajes de salida: Podrías mejorar la experiencia del usuario al proporcionar mensajes más claros o personalizados. Por ejemplo, al final del juego, podrías sugerir que jueguen de nuevo.

  4. Estructura del código: Considera dividir tu código en métodos más pequeños para mejorar la legibilidad. Por ejemplo, podrías tener un método para manejar la entrada del usuario y otro para verificar si el número es correcto.

  5. Manejo de excepciones: Aunque ya estás manejando entradas no válidas, podrías mejorar el manejo de excepciones para asegurarte de que el programa no se cierre inesperadamente.

Aquí tienes un ejemplo de cómo podrías usar constantes y métodos:

import java.util.Random;
import java.util.Scanner;

public class tarea2 {

    final static int MAX_INTENTOS = 5;
    final static int MAX_NUMERO = 100;

    public static void main(String[] args) {
        System.out.println("Adivina el Numero");
        mostrarReglas();
        int numRandom = new Random().nextInt(MAX_NUMERO + 1);
        boolean logro = false;
        Scanner teclado = new Scanner(System.in);

        for (int i = 0; i < MAX_INTENTOS; i++) {
            int numValido = obtenerNumeroValido(teclado);
            if (numValido == numRandom) {
                System.out.println("Has acertado al numero en " + (i + 1) + " intentos, Felicitaciones");
                logro = true;
                break;
            } else if (numValido > numRandom) {
                System.out.println("El numero es Menor");
            } else {
                System.out.println("El numero es Mayor");
            }
        }
        teclado.close();

        if (!logro) {
            System.out.println("Lo siento, no adivinaste. El número era: " + numRandom + ". ¡Para la Próxima!");
        }
    }

    private static void mostrarReglas() {
        String reglas = """
                Debes adivinar un numero entre 0 y 100
                solo tendrás 5 oportunidades para lograrlo.
                Solo deben ser números Enteros y Positivos.
                Asi que manos a la obra y Juguemos""";
        System.out.println(reglas);
    }

    private static int obtenerNumeroValido(Scanner teclado) {
        int numValido = -1;
        boolean entradaValida = false;
        while (!entradaValida) {
            System.out.println("Ingresa un Numero entre 0 y 100");
            if (teclado.hasNextInt()) {
                int num = teclado.nextInt();
                if (num >= 0 && num <= MAX_NUMERO) {
                    numValido = num;
                    entradaValida = true;
                } else {
                    System.out.println("El número debe estar entre 0 y 100");
                }
            } else {
                System.out.println("Ingresa Solo numeros enteros!!!");
                teclado.next();
            }
        }
        return numValido;
    }
}

Espero que estas sugerencias te sean útiles para mejorar tu código. ¡Sigue así y diviértete programando!

Espero ter ayudado y bons estudos!

agradezco la respuesta, pero me generó u as dudas.
int numRandom = new Random().nextInt(101); mi código esta mal o genera plca integridad??
comprendo el consejo. poner todo en bloques, esos deben ser ordenados por acción u otra situación?
gracias por las sujerencias. las pondre en práctica