Autor Tema: Solucion Ejercicio CU00672B - Generar números aleatorios en Java, rangos  (Leído 4441 veces)

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Buenas noches, envio la solucion del ejercicio, no agrego la clase EntradaDeTeclado pues no se le hizo ninguna modificacion, la use tal cual se mostro en la entrega. Me encuentro pendiente a las anotaciones.

Clase SerieDeAleatorios (a la cual le agrege el metodo mostrarNumero y suprimi los avisos para el juego)
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Random;
 
public class SerieDeAleatorios {
    private ArrayList<Integer> serieAleatoria;
 
    public SerieDeAleatorios (int numeroItems) {
        serieAleatoria = new ArrayList<Integer> ();
        for (int i=0; i<numeroItems; i++) {
            serieAleatoria.add(0);
        }
    }
 
    public int getNumeroItems() {
        return serieAleatoria.size();
    }
 
    public void generarSerieDeAleatorios () {
        Random numAleatorio;
        numAleatorio = new Random ();
        for (int i=0; i < serieAleatoria.size(); i++) {
            serieAleatoria.set(i, numAleatorio.nextInt(101) );
        }
    }
 
    public void mostrarSerie() {
        for (Integer tmpObjeto :  serieAleatoria) {
            System.out.print ("El numero aleatorio es: " + tmpObjeto.toString() );   
        }
    }
   
    public Integer mostrarNumero(int numDeLaSerie) {
        Integer valor = serieAleatoria.get(numDeLaSerie);
        return valor;
    }
}

Clase Prueba (donde se encuentra el main)
Código: [Seleccionar]
//Ejercicio Nro 72
public class Prueba {
    public static void main(String[] args) {
        System.out.println("Juego: Adivina el Numero.\nSe ha generado un número aletatorio entero entre 1 y 100, intente adivinarlo.\n\nEmpecemos.");
        SerieDeAleatorios serie = new SerieDeAleatorios(1);
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        serie.generarSerieDeAleatorios();
        boolean valorCorrecto = false;
        System.out.println("Ingrese su numero para adivinar:");
        while (valorCorrecto == false){
            entrada.pedirEntrada();
            Integer valorEnLaSerie = serie.mostrarNumero(0);
            Integer numIngresado = 0;
            numIngresado = numIngresado.valueOf(entrada.getEntrada());
            if (numIngresado > valorEnLaSerie) {
                System.out.println("No has acertado: el número es menor. Prueba otra vez");
            } else  if (numIngresado < valorEnLaSerie) {
                System.out.println("No has acertado: el número es mayor");
            } else if (numIngresado.equals(valorEnLaSerie)) {
                System.out.println("Es Correcto.\nGanaste un pollo a la brasa. :P");
                valorCorrecto = true;
            }
        }
    }
}
« Última modificación: 16 de Febrero 2015, 09:07 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Solucion Ejercicio CU00672B - Generar números aleatorios en Java.
« Respuesta #1 en: 15 de Febrero 2015, 16:41 »
Hola jotase

Tu ejercicio está muy bien. Genera un número aleatorio y con un blucle nos permite hacer intentos hasta acertarlo. Bien.

Aún así, tengo un pero para el ejercicio.
Puedo compararlo con el mostrado en esta lección en que se creaba una lista con varios números aleatorios.
Seguramente lo has usado de referencia. Y está bien, se aprende codificando y con ejemplos que funcionan.

El pero, es que se pedía un solo número aleatorio.
No hace falta crear un ArrayList para utilizar solo el primer elemento de éste.
Bastaba con que una variable conservara el número aleatorio que genere la clase Random.

Quiero sugerirte que hagas una versión de este ejercicio donde hagas uso comedido de los recursos de Java para este ejercicio. Y de paso comprueba que se pedía:
Citar
El programa debe iniciarse indicando “Se ha generado un número aletatorio entero entre 1 y 100, intente adivinarlo”.

Y tu instrucción:
    serieAleatoria.set(i, numAleatorio.nextInt(101) );
genera un número entre 0 y 100

Saludos

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Solucion Ejercicio CU00672B - Generar números aleatorios en Java.
« Respuesta #2 en: 15 de Febrero 2015, 19:45 »
Si, tienes razon, el valor generado va de 0 a 100, estuve buscando en el api de java algun metodo que hiciera lo que se solicita en el ejercicio pero no pude hacer que me funcione alguno, busque en internet y encontre la siguiente linea
Código: [Seleccionar]
int numAlAzar = rdmAlAzar.nextInt(101 - 1) + 1;
No estoy seguro de como funciona esto pero se que no acepta el 0.

Envio mi codigo completo para su revision, Gracias.
Código: [Seleccionar]
import java.util.Random;
//Ejercicio 72 (Corregido)
public class Prueba {
    public static void main (String [] args) {
        System.out.println("Juego: Adivina el Numero.\nSe ha generado un número aletatorio entero entre 1 y 100, intente adivinarlo.\n\nEmpecemos.");
        Random rdmAlAzar = new Random();
        int numAlAzar = rdmAlAzar.nextInt(101 - 1) + 1;
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        boolean valorCorrecto = false;
        System.out.println("Ingrese su numero para adivinar:");
        while(valorCorrecto == false) {
            entrada.pedirEntrada();
            Integer numIngresado = 0;
            numIngresado = numIngresado.valueOf(entrada.getEntrada());
            if (numIngresado > numAlAzar) {
                System.out.println("No has acertado: el número es menor. Prueba otra vez");
            } else if (numIngresado < numAlAzar) {
                System.out.println("No has acertado: el número es mayor");
            } else if (numIngresado.equals(numAlAzar)) {
                System.out.println("Es Correcto.\nGanaste!");
                valorCorrecto = true;
            }
        }
    }
}

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Solucion Ejercicio CU00672B - Generar números aleatorios en Java.
« Respuesta #3 en: 15 de Febrero 2015, 21:52 »
Hola jotase

Si, ahora tu clase cumple con lo solicitado.
Y además utilizando menos código que en la versión anterior.

Esta instrución:
    rdmAlAzar.nextInt(101 - 1) + 1;
simplificada es:
    rdmAlAzar.nextInt(100) + 1;
Y la fórmula general es:
    rdmAlAzar.nextInt(numero de valores) + a partir de este numero incluido;
Ejem.
Generar números aleatorios con 25 valores diferentes empezando a partir del 12
    rdmAlAzar.nextInt(25) + 12;
Es más complicado hacer la cuenta al revés
Generar números aleatorios entre el 33 y el 87 inclusives
    rdmAlAzar.nextInt(87 - 33 +1) + 33;
que simplificado es:
    rdmAlAzar.nextInt(55) + 33;

Saludos

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Solucion Ejercicio CU00672B - Generar números aleatorios en Java.
« Respuesta #4 en: 15 de Febrero 2015, 21:58 »
Entonces, utilizando tu ejemplo...
Citar
Generar números aleatorios con 25 valores diferentes empezando a partir del 12
    rdmAlAzar.nextInt(25) + 12;
Se puede decir que el programa generara cualquier numero al azar en el rango de 12 hasta 37, verdad?

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Solucion Ejercicio CU00672B - Generar números aleatorios en Java, rangos
« Respuesta #5 en: 16 de Febrero 2015, 22:14 »
Si jotase.

Generará números aleatorios en el rango 12 - 37  ambos inclusive.

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