lunes, 22 de agosto de 2016

Adivinar un número aleatorio entre 1 y 10.

En el programa que os dejo hoy permite generar un número aleatorio utilizando el método estático random() de la clase Math y, el usuario deberá de introducir por teclado un número cada vez para adivinar el número aleatorio, mostrándose al final un mensaje de acierto con el número total de intentos.

Es importantísimo que miremos la documentación Java para saber cómo funcionan las clases y sus métodos. Para generar el número aleatorio he utilizado el método estático random() de la clase Math, si nos dirigimos a la documentación Java en el siguiente enlace Documentación Java y buscamos en las clases de la izquierda la clase Math y miramos los métodos estáticos que contiene la clase podremos ver el método random().


Este método nos dice la documentación de Java que es estático, como ya había dicho, que devuelve un valor de tipo double con un valor comprendido entre 0 y 1. Pero si queremos que nos genere un número aleatorio entre 1 y 10 ¿Cómo hacemos para que no nos muestre un número entre 1 y 1?  Si en la documentación de Java ponía que devolvía un dato de tipo double ¿Cómo pasamos un tipo double a tipo int?
En la siguiente instrucción se ve claramente:

int aleatorio = (int) (Math.random() * 10 +1);

Se crea una variable de tipo entero que almacenará el valor de un número aleatorio entre 0 y menor que 1 y será multiplicado por 10 (para que el valor comprenda el valor entre 0 y 10) y sumado en 1,  esta parte entre paréntesis para que se ejecute primero para, posteriormente una vez hecha la multiplicación y luego la suma, hacer un casting y convertir el double en entero. Si no pusiéramos los paréntesis (Math.random() * 10 + 1) el resultado siempre nos daría 0, ¿Por qué? Pues porque primero generaría un número aleatorio entre 0 y menor que uno, por ejemplo 0,3 y después haría el casting a entero, quedando el resultado 0 para luego multiplicarlo por 10. Por eso es tan importante el uso de los paréntesis en este caso.
El resto del código está documentado y no creo que tengáis ningún tipo de problema en entenderlo, pero si tenéis alguna duda no dudéis en dejar un comentario.

import java.util.Scanner;

public class AdivinaElNumero {
    public static void main(String[] args) {
        Scanner miScanner = new Scanner(System.in);
        int numElegido;
        int numIntentos = 0;
        //Uso del método estático random de la clase Math y asignar el 
        //valor aleatorio a la variable entera aleatorio.
        int aleatorio =(int) (Math.random()* 10 + 1);
        //El número escrito se almacena en la variable numElegido y aumenta
        //en 1 el número de intentos.
        System.out.print("Escriba el número: ");
        numElegido = miScanner.nextInt();
        numIntentos++;
        //Bucle while que se repetirá si el número elegido es distinto al 
        //número generado aleatoriamente
        //Aumenta el número de intentos en 1 y muestra de nuevo el mensaje
        //y almacena el nuevo valor en la variable numElegido
        while(numElegido != aleatorio){
            numIntentos++;
            System.out.println("Has fallado!!!, Inténtalo de nuevo");
            System.out.print("Escriba el número: ");
            numElegido = miScanner.nextInt();
        }
        
        System.out.println("Enhorabuena, has acertado el número al " +
                "intento número " + numIntentos);
    }
}

No hay comentarios:

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...