Autor Tema: Ejemplo generar números aleatorios en Java. Juego adivinar Ejercicio CU00672B  (Leído 7411 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola otra vez. Me he propuesto agregarle una dificultad más al ejercicio, haciendo que el usuario del juego solo tenga 10 oportunidades de acertar. Si no lo hace en ese tiempo, ha perdido. Además al terminar (perdiendo o ganando) el programa le propone volver a comenzar, sin tener que salir y volver a entrar.

Código: [Seleccionar]
import java.util.Scanner;
import java.util.Random;
public class RandomInteger {

    public static void main(String [] Args) {
        String j = "1";
        while (j.equals("1")) {

            System.out.println ("\f");
            System.out.println ("Adivina el número del 1 al 100 que hemos pensado");

            Random randomGenerator = new Random();
            int randomInt = randomGenerator.nextInt(100);
            int i = 0;
            while (i < 10) {
                System.out.println("Intenta adivinar, te quedan " + (10-i) + " intentos");
                Scanner entrada = new Scanner (System.in);
                int primerIntento = entrada.nextInt();
                if (primerIntento == randomInt) {
                    System.out.println ("Acertaste");
                    break;
                } else if (primerIntento < randomInt) {
                    System.out.println ("No. El número a adivinar es mayor que ese");
                } else {
                    System.out.println ("No. El numero a adivinar es menor que ese");
                }
                i++;
            }
            if ((10-i) == 0) {
                System.out.println ("Se acabaron tus opciones");
            } else {
            }
            System.out.println ("Ha terminado el juego");
            System.out.println ("¿Quieres juegar de nuevo? Presiona 1");
            System.out.println ("Sino presiona cualquier otra tecla");
            Scanner entrada2 = new Scanner (System.in);
            j = entrada2.nextLine();
            System.out.println ("Gracias por jugar");

        }
    }
}
« Última modificación: 17 de Abril 2015, 10:50 por Alex Rodríguez »

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Re:Ejercicio CU00672B. Generar números aleatorios en Java
« Respuesta #1 en: 16 de Abril 2015, 18:46 »
Hola de nuevo!

Que buen juego  ;D yo lo veo bien! La única linea que pienso que se podría cambiar:

Citar
System.out.println ("¿Quieres juegar de nuevo? Presiona 1");
            System.out.println ("Sino presiona cualquier otra tecla");
            Scanner entrada2 = new Scanner (System.in);
            j = entrada2.nextLine();

            System.out.println ("Gracias por jugar");

Puedes declarar el Scanner desde aqui arriba y te ahorras declarar otro Scanner ahi:

Citar
public static void main(String [] Args) {
        Scanner entrada = new Scanner (System.in);
        String j = "1";
        while (j.equals("1")) {

Cambia el nextLine() por next() en esta linea:

Citar
System.out.println ("¿Quieres juegar de nuevo? Presiona 1");
            System.out.println ("Sino presiona cualquier otra tecla");
            j = entrada.next();
            System.out.println ("Gracias por jugar");

Funciona igual si lo colocas asi! elimina el Scanner de ahi abajo, cambia el nextLine y veras... nextLine solo se usa para ingresar algo como:

"Soy un barrendero"

segun su programa tu solo necesitas que el usuario ingrese "1".
Saludos !
« Última modificación: 16 de Abril 2015, 18:51 por Dan_SB »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Re:Ejercicio CU00672B. Generar números aleatorios en Java
« Respuesta #2 en: 16 de Abril 2015, 19:23 »
Es verdad. Así es más sintético. Muchas gracias por ser tan atento!

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ejercicio CU00672B. Generar números aleatorios en Java
« Respuesta #3 en: 16 de Abril 2015, 21:24 »
Hola, además de lo comentado por Dan veo otra cosa que sería interesante tener en cuenta. Usar un break dentro de un bucle while es una ruptura del flujo natural de un programa. En general entre programadores se considera poco elegante usar esto porque dificulta comprender cómo funcionan los programas.

Para evitar usar el break puedes basarte en un booleano según esta idea:

Código: [Seleccionar]
           
int i = 0;
boolean salir=false;
 while (i < 10 && salir==false) {
                ...
                if (primerIntento == randomInt) {
                    System.out.println ("Acertaste");
                    salir=true;
                } else if (primerIntento < randomInt) {
                    ...
                } else {
                    ...
                }
                i++;
            }

En vez de usar el break usas una variable booleana para indicar que el bucle no se debe repetir.

Saludos

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00672B. Generar números aleatorios en Java
« Respuesta #4 en: 16 de Abril 2015, 21:28 »
Hola fedegaray, hoy estamos todos contigo

Comprueba que la instrucción:
    int randomInt = randomGenerator.nextInt(100);
genera un entero pseudoaleatorio en un rango que va desde 0 a 99

En cuanto al código hace su función perfectamente.
Buena idea eso de probar el juego de nuevo.
Hecho en falta que si se sobrepasan los 10 intentos no se informe al usuario del programa del número que no ha sabido encontrar.
Algo como:
    System.out.println ("Se acabaron tus opciones. El numero era el: " + randomInt);

Saludos

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Re:Ejercicio CU00672B. Generar números aleatorios en Java
« Respuesta #5 en: 16 de Abril 2015, 23:22 »
No me puedo creer la generosidad de todos! Así es muy bueno aprender.

Alex: No me sabía esto del break, y me alegro de que me lo digas. La verdad es que no se me ocurría cómo resolver la salida del bucle en el medio del proceso, y tu idea me parece perfecta. Ya lo cambio.

Toni: Me siento observado, están todos conmigo! jajaja! Siento que no hay forma de que se pase un error por alto, por lo que este foro y el curso en general me dan una sensación de garantía de calidad muy alta!
Tus dos aportes me han ayudado a pensar mejor el código. Qué frustrante jugar a una adivinanza en la que al final no te dicen la respuesta!! Debo corregir eso!. Y también se me pasó por alto que el juego debe incluir el 0, y que para llegar a 100 debo poner:

Código: [Seleccionar]
int randomInt = randomGenerator.nextInt(101);
A continuación copio el código corregido con todos los aportes...

Código: [Seleccionar]
import java.util.Random;
import java.util.Scanner;

public class RandomInteger {

    public static void main(String [] Args) {
        Scanner entrada = new Scanner (System.in);
        String j = "1";
        while (j.equals("1")) {

            System.out.println ("\f");
            System.out.println ("Adivina el número del 0 al 100 que hemos pensado");

            Random randomGenerator = new Random();
            int randomInt = randomGenerator.nextInt(101);
            boolean salir = false;
            int i = 0;
            while (i < 10 && salir == false) {
                System.out.println("Intenta adivinar, te quedan " + (10-i) + " intentos");

                int primerIntento = entrada.nextInt();
                if (primerIntento == randomInt) {
                    System.out.println ("Acertaste");
                    salir = true;
                } else if (primerIntento < randomInt) {
                    System.out.println ("No. El número a adivinar es mayor que ese");
                } else {
                    System.out.println ("No. El numero a adivinar es menor que ese");
                }
                i++;
            }
            if ((10-i) == 0) {
                System.out.println ("Se acabaron tus opciones. El número buscado era " + randomInt);
            } else {
            }
            System.out.println ("Ha terminado el juego");
            System.out.println ("¿Quieres juegar de nuevo? Presiona 1");
            System.out.println ("Sino presiona cualquier otra tecla");
            j = entrada.next();
            System.out.println ("Gracias por jugar");

        }
    }
}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".