Autor Tema: Java Clase para generar números aleatorios enteros en intervalo Random CU00672B  (Leído 3114 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noches.

Aquí dejo una posible solución del ejercicio CU00672B del curso Java desde cero.

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

Código "EntradaDeTeclado":

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

public class EntradaDeTeclado{
    private String entradaTeclado;
    private Integer tmpInteger;
   
    public EntradaDeTeclado(){
        entradaTeclado = "";
        tmpInteger = 0;
    }
   

    //Creamos un objeto "Scanner" y convertimos "entradaTeclado" en tipo objeto "Integer"
    public void pedirEntrada(){
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
        tmpInteger = tmpInteger.valueOf(entradaTeclado);
    }
   
    public Integer getEntrada(){
       
        return tmpInteger;}

}

El código de la clase "NumeroAleatorio":

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

public class NumeroAleatorio{
    private Random numeroAleatorio;
    private Integer numero;
   
    public void NumeroAletorio(){
       Integer numero = 0;
    }
   
    public void generarNumeroAletorio(){
        numeroAleatorio = new Random();
        numero = numero.valueOf (numeroAleatorio.nextInt(101));
        System.out.println("Se ha creado un número aleatorio entre 1 y 100, intente adivinarlo :)");
    }
   
    public Integer recuperarNumeroAleatorio(){return numero;}
}

Código de la clase "ElJuego":

Código: [Seleccionar]
public class ElJuego{
    public static void main(){
        NumeroAleatorio numeroAleatorio = new NumeroAleatorio();
        numeroAleatorio.generarNumeroAletorio();
        EntradaDeTeclado entradaTeclado = new EntradaDeTeclado();
        //Integer tmpInteger = 0;
        //tmpInteger = tmpInteger.valueOf (entradaTeclado.getEntrada() );
       
        //Mientras "entradaTeclado.getEntrada()" no sea igual al número que ha elegido el pc al azar, que se repita este bucle de tipo "while".
        while(entradaTeclado.getEntrada().equals(numeroAleatorio.recuperarNumeroAleatorio())==false){
        System.out.print("Entre un número: ");
        entradaTeclado.pedirEntrada();
       
       
        //Cada vez que el compilador pase por aquí que valore si la "entradaTeclado.getEntrada()" cumple estas condicionales.
        if(entradaTeclado.getEntrada().equals(numeroAleatorio.recuperarNumeroAleatorio())){
            System.out.println("Bravo! Has acertado!");
        }else if(entradaTeclado.getEntrada()>numeroAleatorio.recuperarNumeroAleatorio()){
            System.out.println("No has acertado: el número es menor. Prueba otra vez");
        }else if(entradaTeclado.getEntrada()<numeroAleatorio.recuperarNumeroAleatorio()){
            System.out.println("No has acertado: el número es mayor");
        }
    }
    }
}

Gracias.
« Última modificación: 10 de Marzo 2016, 09:17 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! El programa funciona bien y has hecho un buen diseño orientado a objetos, separando tareas en varias clases, buen trabajo  ;)

Solo comentar una cosa, en este método hay algo que un programador avanzado diría que no está bien:
Código: [Seleccionar]
    public void generarNumeroAletorio(){
        numeroAleatorio = new Random();
        numero = numero.valueOf (numeroAleatorio.nextInt(101));
        System.out.println("Se ha creado un número aleatorio entre 1 y 100, intente adivinarlo :)");
    }

Lo que se ve raro es tener un System.out.println en un método cuya función es generar un número aleatorio. Un método debe hacer algo lo más concreto posible. Si el método sirve para generar un número aleatorio, debe hacer exactamente eso, y no mostrar un mensaje por consola. Imagina que esa clase y método quieres utilizarla para otro programa que ya no es sobre adivinar números. En ese caso el método ya no te serviría por haber introducido ese mensaje. En resumen, como buena práctica de programación hay que intentar que cada método se encargue de cosas específicas evitando mezclar métodos que se encargan de calcular algo con mensajes de consola, etc. porque eso dificulta la reutilización, que es un objetivo habitual en la programación.

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noches, César.

Gracias por corregirme otro ejercicio más.

Tomo nota sobre la observación y decirte que pensándolo tienes toda la razón del mundo. Si quisieramos utilizar este método en otro programa, tendríamos que modificarlo. Y si ya de inicio se hubiera hecho sólo con el cometido de generar un número aleatorio ya tendríamos la faena hecha.

Gracias.

 

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