Autor Tema: Curso Java ejercicio CU00672B. Generar números aleatorios en Java. Clase Random  (Leído 3109 veces)

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Una posible solución al ejercicio.
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaTeclado{

    private String entrada;
    Scanner scaner;
   
    public EntradaTeclado(){
        entrada="";
        scaner = new Scanner(System.in);
    }

    public String getEntrada(){
        return entrada;
    }

    public void setEntrada(){
        entrada = scaner.nextLine();
    }
}
Código: [Seleccionar]
import java.util.Random;

public class AdivinaNumero{

    public static void main(String Arg[]){

        int numeroAleatorio=0;

        // Nos aseguramos de que el numero generado no se el 0
        while (numeroAleatorio==0){
            numeroAleatorio=new Random().nextInt(101);
        }

        System.out.print("Se ha generado un numero aleatorio entre 1 y 100, intente adivinarlo...: ");

        EntradaTeclado entradaTeclado=new EntradaTeclado();
        Integer numeroAux=0;

        do{
            entradaTeclado.setEntrada();
            numeroAux=numeroAux.valueOf(entradaTeclado.getEntrada());
            if((int)numeroAux>numeroAleatorio){
                System.out.print("No has acertado: el número es menor. Prueba otra vez : ");
            }else{
                if((int)numeroAux<numeroAleatorio){
                    System.out.print("No has acertado: el número es mayor. Prueba otra vez : ");
                }
            }
        }while((int)numeroAux!=numeroAleatorio);

        System.out.println("¡Enhorabuena has acertado!");
    }
}
Saludos.

RaGa

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


Estuve revisando tu ejercicio y está muy bien. Has usado herramientas que aún no se han visto en el curso como el tema del casting (lección nº89).

Voy hacerte algunas sugerencias para tener en cuenta. Pero insisto, tu ejercicio esta muy bien y cumple con la consigna del ejercicio.

Dentro del bucle do while, utilizas el condicional if con su respectivo else. Dentro del else vuelves a utilizar un condicional if:

Código: [Seleccionar]
do{
            entradaTeclado.setEntrada();
            numeroAux=numeroAux.valueOf(entradaTeclado.getEntrada());
            if((int)numeroAux>numeroAleatorio){
                System.out.print("No has acertado: el número es menor. Prueba otra vez : ");
            }else{
                if((int)numeroAux<numeroAleatorio){
                    System.out.print("No has acertado: el número es mayor. Prueba otra vez : ");
                }
            }
        }while((int)numeroAux!=numeroAleatorio);

Podríamos resolverle directamente con un condicional if y un else if, de la siguiente manera:

Código: [Seleccionar]
do{
            entradaTeclado.setEntrada();
            numeroAux=numeroAux.valueOf(entradaTeclado.getEntrada());
            if((int)numeroAux>numeroAleatorio){
                System.out.print("No has acertado: el número es menor. Prueba otra vez : ");
            }else if((int)numeroAux<numeroAleatorio){
                     System.out.print("No has acertado: el número es mayor. Prueba otra vez : ");
            }
        }while((int)numeroAux!=numeroAleatorio);

Respecto a la clase EntradaTeclado. Hemos conversado un poco sobre ella en una publicación anterior

https://www.aprenderaprogramar.com/foros/index.php?topic=2880.0

y mi sugerencia va nuevamente en esa misma dirección. ¿Y cuál es la nueva razón para sostener esto? Pues que en POO siempre pensamos en la modularidad y la reutilización del código como una de nuestras premisas.
Entonces, esta vez que necesitamos que la entrada por teclado sea un tipo int en vez de un tipo String, bien podríamos agregar un nuevo método a la clase GestionadorEntradasTeclado para que cumpla esa necesidad. Definiríamos un nuevo método en esa clase que se llame recogerInt.
De esta manera con un solo objeto gestionamos todo lo que recibimos por teclado :

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

public class GestionadorEntradasTeclado{

    /**Devuelve un objeto tipo String que corrsponde al valor ingresado por el usuario a través del teclado.
     * @return retorna un objeto tipo String.
     */
     public String recogerString(){
        Scanner scannerTeclado = new Scanner (System.in);
        String valorTeclado = scannerTeclado.nextLine();
        return valorTeclado;
    }
   
    /**Devuelve un valor tipo int que corresponde al valor ingresado por el usuario a través del teclado.
    * @return retorna un valor tipo int.
    */
    public int recogerInt(){
       Scanner scannerTeclado = new Scanner (System.in);
       int valorTeclado = scannerTeclado.nextInt();
       String valorTmp = scannerTeclado.nextLine(); // para vaciar el buffer.
       return valorTeclado;
    }
     
} // Fin de la clase

Igualmente he de decirte que has utilizado muy bien en tu código el método valueOf para convertir el tipo String en tipo Integer.

Saludos.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola barriway, pedirte que siempre que obtengas respuesta a una consulta respondas tú a su vez agradeciendo o haciendo alguna observación que permita saber que has leído la respuesta. Si no haces esto ni siquiera se sabe si has leído la respuesta o si tienes interés. Es lo que veo en este hilo o en este otro https://www.aprenderaprogramar.com/foros/index.php?topic=2888.0

Sé que en muchos hilos sí respondes, o que quizás lo harás más adelante, pero no está de más recordarlo.

Saludos

 

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