Autor Tema: Números aleatorios java en un rango math.random o clase Random CU00672B  (Leído 5098 veces)

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Ejercicio generar numeros aleatorios en java resuelto.

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

public class Test73
{
    public static void main(String [] args){
        System.out.print("\nSe ha generado un numero aleatorio entero entre 1 y 100, intente adivinarlo.\n");
        int numAleatorio = (int) (Math.random() * 100) + 1;
        while(true){
            Scanner escribirNumero = new Scanner(System.in);
            String numeroEscrito = escribirNumero.nextLine();
            Integer numero;
            numero = Integer.valueOf(numeroEscrito);
            if ( numAleatorio < numero ){
                System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
            }else if ( numAleatorio > numero ){
                System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
            }else{
                System.out.print("Has acertado.\n");
                   break;
            }
        }
    }
}
« última modificación: 16 de Agosto 2015, 13:37 de Alex Rodríguez »

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
El ejrcicio de esta respuesta es el mismo que el anterior pero sin usar el while(true) y por tanto eliminando este defecto de diseño.
Código: [Seleccionar]
import java.util.Scanner;

public class Test73
{
    public static void main(String [] args){
        System.out.print("\nSe ha generado un numero aleatorio entero entre 1 y 100, intente adivinarlo.\n");
        int numAleatorio = (int) (Math.random() * 100) + 1;
        Scanner escribirNumero = new Scanner(System.in);
        String numeroEscrito = escribirNumero.nextLine();
        Integer numero;
        numero = Integer.valueOf(numeroEscrito);
        if ( numAleatorio < numero ){
            System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
        }else if ( numAleatorio > numero ){
            System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
        }else{
            System.out.print("Has acertado.\n");
        }
        while( numAleatorio != numero){
            Scanner escribirNumero2 = new Scanner(System.in);
            String numeroEscrito2 = escribirNumero2.nextLine();
            Integer numero2;
            numero2 = Integer.valueOf(numeroEscrito2);
            if ( numAleatorio < numero2 ){
                System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
            }else if ( numAleatorio > numero2 ){
                System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
            }else{
                System.out.print("Has acertado.\n");
                break;
            }
        }
    }
}

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Campillo!

Estuve analizando tu ejercicio y noto que aún mantienes la sentencia 'break' cuando su no inclusión le daría mayor robustez al bucle.
Por otro lado la consigna del ejercicio era utilizar la clase Random y tu utilizaste un método de la clase Math para generar el número aleatorio.

Sugeriría que revises estas puntos, y por otro lado tal vez sería recomendable utilizar más de una clase para resolver el problema.

Puedes guiarte de programas de otros compañeros del foro donde puedes recoger buenas ideas a la hora de volver a codificar el ejercicio:

http://www.aprenderaprogramar.com/foros/index.php?topic=2893.msg13143#msg13143

Saludos.

Campillo

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Generar un numero aleatorio
Código: [Seleccionar]
import java.util.Random;

public class NumeroAleatorio
{
    Integer numero;
   
    public NumeroAleatorio(){
        numero = 0;
    }
   
    public void setNumeroAleatorio(){
        Random numAleatorio;
        numAleatorio = new Random();
        int numeroAleatorio;
        numeroAleatorio = (numAleatorio.nextInt(101));
        numero = numeroAleatorio;
    }
   
    public int getNumeroAleatorio(){
        return numero;
    }
   
}
Introducir un numero
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaNumeroAleatorio
{
    private Integer entrada;
   
    public EntradaNumeroAleatorio(){
        entrada = 0;
    }
   
    public void setEntrada(){
        Scanner escribirNumero = new Scanner(System.in);
        String numeroEscrito = escribirNumero.nextLine();
        entrada = Integer.valueOf(numeroEscrito);
    }
   
    public Integer getEntrada(){ return entrada; }
}
Clase con el metodo main
Código: [Seleccionar]
public class Test73
{
    public static void main(String [] args){
        new NumeroAleatorio();
        NumeroAleatorio numeroAleatorio1 = new NumeroAleatorio();
        new EntradaNumeroAleatorio();
        EntradaNumeroAleatorio entrada1 = new EntradaNumeroAleatorio();
        System.out.println("\nSe ha generado un numero aleatorio entre 1 y 100, intente adivinarlo:");
        do{
            numeroAleatorio1.setNumeroAleatorio();
            entrada1.setEntrada();
            if ( numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
            }else if ( numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
            }else{
                System.out.print("Has acertado.\n");
            }
        }
        while(numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada() || numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada());
    }
}

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola Campillo:

Estuve analizando tu ejercicio y ahora lo veo mucho mejor. Veamos entonces algunas observaciones puntuales en las clases.

Respecto de la clase EntradaNumeroAleatorio, muy bien.

Respecto de la clase NumeroAleatorio, muy bien también. Simplemente podría hacerse un poco más corto el método setNumeroAleatorio() no definiendo el atributo tipo int y usar directamente el campo de instancia 'numero'. De esa manera el método quedaría:

Código: [Seleccionar]
    public void setNumeroAleatorio(){
        Random numAleatorio;
        numAleatorio = new Random();
        numero = (numAleatorio.nextInt(101));
    }

Respecto de la clase Test73, podríamos observar lo siguiente:
1) Las siguientes dos líneas no deberían existir ya que no contribuyen al código:

Código: [Seleccionar]
new NumeroAleatorio();
Código: [Seleccionar]
new EntradaNumeroAleatorio();
2) La condición while debe chequear desigualdad entre el número aleatorio y la entrada que ingresamos por teclado.

3) La siguiente línea debería estar fuera del ciclo do while, ya que de lo contrario estaríamos eligiendo un nuevo número cada vez que no acertamos.
Código: [Seleccionar]
numeroAleatorio1.setNumeroAleatorio();
4) Habría que cambiar el signo de desigualdad en la condicion else if.

5) La línea :
Código: [Seleccionar]
System.out.print("Has acertado.\n");Debería quedar fuera del bucle do while.

La clase con todos estos cambios quedaría de la siguiente manera.

Código: [Seleccionar]
public class Test73
{
    public static void main(String [] args){
        NumeroAleatorio numeroAleatorio1 = new NumeroAleatorio();
        EntradaNumeroAleatorio entrada1 = new EntradaNumeroAleatorio();
        System.out.println("\nSe ha generado un numero aleatorio entre 1 y 100, intente adivinarlo:");
        numeroAleatorio1.setNumeroAleatorio();
        do{
            entrada1.setEntrada();
            if ( numeroAleatorio1.getNumeroAleatorio() < entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es menor.Prueba otra vez.\n");
            }else if ( numeroAleatorio1.getNumeroAleatorio() > entrada1.getEntrada() ){
                System.out.print("No has acertado: el numero es mayor.Prueba otra vez.\n");
            }
        }
        while(numeroAleatorio1.getNumeroAleatorio() != entrada1.getEntrada());
        System.out.print("Has acertado.\n");
    }
}

Analízalo y cualquier duda estamos aqui para volver a revisarlo.

 

Esto es un laboratorio de ideas...
Aprender a programar

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".