Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: paramonso en 28 de Septiembre 2018, 17:04

Título: Random nextInt Java desde Cero Generar números aleatorios enteros mayor CU00672B
Publicado por: paramonso en 28 de Septiembre 2018, 17:04
Hola. Dejo el Ejercicio CU00672B del curso básico de aprendizaje de programación orientada a objetos. Generar números aleatorios en Java. Clase Random y método nextInt. Ejercicio ejemplo resuelto.

Citar
EJERCICIO

Crea un programa Java que permita “jugar a adivinar un número” como se expone a continuación. El programa debe iniciarse indicando “Se ha generado un número aleatorio entero entre 1 y 100, intente adivinarlo”. El usuario introducirá un número y si el número aleatorio generado por el ordenador es menor deberá indicarse “No has acertado: el número es menor. Prueba otra vez”. Si el usuario introduce un número menor que el número aleatorio deberá indicarse “No has acertado: el número es mayor”. El programa terminará cuando el usuario introduzca el número aleatorio que había escogido el ordenador. Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com.

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner; //Importación de la clase Scanner desde la biblioteca Java

public class EntradaDeTeclado {  // Definimos la clase EntradaDeTeclado aprenderaprogramar.com
   private String entradaTeclado; //Variable de instancia (campo) del método
 
    //Constructor
    public EntradaDeTeclado ()  {
        entradaTeclado="";
       } //Cierre del constructor
 
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
    } //Cierre del método pedirEntrada

    public String getEntrada () {

        return entradaTeclado;

 } //Cierre del método getEntrada

} //Cierre de la clase

Clase TestPseudoAleatorios

 
Código: [Seleccionar]
/// Programa Test de obtención de números pseudoaleatorios aprenderaprogramar.com
public class TestPseudoAleatorios {
    public static void main (String [ ] Args) {
        boolean salir ;
        Integer tmpAdivinar,tmpEntrada  ;
        NumeroAleatorio numeroAdivinar = new NumeroAleatorio ();
        tmpAdivinar = numeroAdivinar.getNumeroAleatorio();
        String msg="";
         System.out.print ("Por favor introduzca el número a Adivinar ");
         EntradaDeTeclado entrada = new EntradaDeTeclado();
         entrada.pedirEntrada();
           
        do {
           
            tmpEntrada=Integer.parseInt(entrada.getEntrada());
            salir=tmpEntrada.equals(tmpAdivinar);
           
            if (tmpEntrada>tmpAdivinar){msg="El numero que ha introducido es mayor que el numero a adivinar\n";}
            if (tmpEntrada<tmpAdivinar){msg="El numero que ha introducido es menor que el numero a adivinar\n";}
           
            if (salir){
                System.out.print('\u000C');//Borrar pantalla por gentileza de Cesar Krall moderador de aprenderaprogramar.com
                System.out.print("!!!!!!! NUMERO ACERTADO !!!!!!!!!!!!\nNumero introducido :"+
                tmpEntrada+ "\nNumero a adivinar :"+tmpAdivinar+"\n");
            }
            else{
                System.out.print('\u000C');//Borrar pantalla por gentileza de Cesar Krall moderador de aprenderaprogramar.com
                System.out.print("NO LO HA ACERTADO. VUELVA A INTENTARLO\n"+msg);
                System.out.print ("Por favor introduzca el número a Adivinar ");
                entrada.pedirEntrada();
            }
             
        } while(!salir); //Cierre do while

        System.out.println ("Gracias por utilizar el programa");
    }
}   //Cierre del main y de la clase

Clase NumeroAleatorio

Código: [Seleccionar]
import java.util.Random;
public class NumeroAleatorio {
    private int numeroAleatorio;

    //Constructor
    public  NumeroAleatorio () {
          Random numAleato=new Random();
         numeroAleatorio=numAleato.nextInt(100)+1 ;// ¿Para que sea 1 el numero menor y 99+1 = 100 el mayor? ¿?
           } //Cierre del constructor
   
    public void NumeroAleatorio(){
         
    }

    public int getNumeroAleatorio(){return numeroAleatorio;}
} //Cierre de la clase

Gracias.
Un saludo. ;)
Título: Re:Random nextInt Java desde Cero Generar números aleatorios enteros mayor CU00672B
Publicado por: Ogramar en 02 de Agosto 2019, 23:00
Buenas, para quien revise este ejercicio, en general todo bien. Comento un par de cosas:

En la clase NumeroAleatorio hay una línea comentada

numeroAleatorio=numAleato.nextInt(100)+1 ;// ¿Para que sea 1 el numero menor y 99+1 = 100 el mayor? ¿?

Efectivamente, si consultamos el api Java podremos ver:

nextInt(int bound)
Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence.

Por tanto nextInt(100) genera un número entero aleatorio entre 0 (incluido) y 100 (excluído), por tanto entre 0 y 99. Al sumarle 1, lo que tenemos es que se obtendrá un número aleatorio entre 1 y 100.

Otro detalle: si se quiere evitar el parseInt tmpEntrada=Integer.parseInt(entrada.getEntrada()); que aparece en la clase test, puede usarse
entradaTeclado = entradaEscaner.nextInt (); en lugar de entradaTeclado = entradaEscaner.nextLine ();

Salu2