Autor Tema: Ejercicio CU00672B generar aleatorios en java con random y nextInt  (Leído 6378 veces)

ThheMau

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 17
    • Ver Perfil
Hola a todos, les tengo la respuesta a este ejercicio. Al principio me costo(con acento en la o  :)) un poco de trabajo, pero me puse a repasar las conversiones y todo fue mas claro ;D.

Les dejo las 3 clases que utilice(con acento en la e  :))

Clase AdivinaNumero
Código: [Seleccionar]
public class AdivinaNumero {
    public static void main (String[]args){
        Integer tmpInteger=1;
        Integer numeroEntrada=0;
        SerieDeAleatorios serie = new SerieDeAleatorios((int)tmpInteger);
        serie.generarSeriedeAleatorios();
        System.out.println("Se ha generado un numero aleatorio entre 1 y 100, intente adivinarlo");
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        entrada.pedirEntrada();
        numeroEntrada=numeroEntrada.valueOf(entrada.getEntrada());
        if(numeroEntrada==serie.getNumeroSerie(0)){
            System.out.println("Felicidades,encontraste el numero");
        }
        while(numeroEntrada!=serie.getNumeroSerie(0)){
            if(numeroEntrada<serie.getNumeroSerie(0)){
                System.out.println("El numero es menor, intentalo de nuevo");
                entrada.pedirEntrada();
                numeroEntrada=numeroEntrada.valueOf(entrada.getEntrada());
            }
            else if (numeroEntrada>serie.getNumeroSerie(0)){
                System.out.println("El numero es mayor, intentalo de nuevo");
                entrada.pedirEntrada();
                numeroEntrada=numeroEntrada.valueOf(entrada.getEntrada());
            }
        }
        System.out.println("Felicidades, encontraste el numero"+"("+serie.getNumeroSerie(0)+")");
    }
}


Clase SerieDeAleatorios
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Random;
public class SerieDeAleatorios{
    private ArrayList<Integer>serieAleatoria;
    public int numAleatorio;
    public SerieDeAleatorios(int numeroItems){
        serieAleatoria= new ArrayList<Integer>();
        //Iniciamos ArrayList lleno de ceros
        for(int i=0;i<numeroItems;i++){
            serieAleatoria.add(0);}
        System.out.println("Serie inicializada. EL numero de elementos de la serie es: "+ getNumeroItems());
    }
    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));
        }
        System.out.println("Serie generada!");
    }
    public void mostrarSerie(){
        System.out.println("Procedemos a mostrar serie");
        for(Integer tmpObjeto : serieAleatoria){
            System.out.println(" "+tmpObjeto.toString());
        }
    }
    public int getNumeroSerie(int numeroMostrar){
        return serieAleatoria.get(numeroMostrar);
    }
}
   
       

Clase EntradaDeTeclado

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado{
    private String entradaTeclado;
   
    public EntradaDeTeclado (){
        entradaTeclado="";
    }
    public void pedirEntrada(){
        Scanner entradaEscaner= new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
    }
    public String getEntrada (){
        return entradaTeclado;
    }
    public String getPrimeraPalabra(){
        for(int i=0;i<entradaTeclado.length();i++){
            if(entradaTeclado.substring(i,i+1).equals(" ")){
                return entradaTeclado.substring(0,i+1);
            }
        }
        return entradaTeclado;
    }
    public int getLongitud(){
        return entradaTeclado.length();
    }
}
   

Gracias por su ayuda,  y si encuentran algo que creen que se puede mejorar diganmelo por favor :D
« Última modificación: 05 de Octubre 2014, 11:28 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00672B
« Respuesta #1 en: 03 de Octubre 2014, 21:15 »
Hola ThheMau

Has adaptado la práctica de la entrega 72 para hacer el ejercicio  propuesto
En principio, bien. Cumple el cometido aunque quiero apostillarte dos cosas


Pero me parece que has buscado un transporte de gran tonelaje para llevar una cajita pequeña
Crear una clase con un ArrayList para contener un único elemento.
En java se presume de realizar código conciso y compacto a la vez que eficiente


Cuando presentas este mensaje
System.out.println("El numero es menor, intentalo de nuevo");
Tu quieres decir que el numero tecleado es menor y debemos poner uno mayor
Pero generalmente la gente habla al revés. Si tu estás demasiado bajo la gente te dice que subas no que bajes.


Mira aquí otra forma de hacerlo
https://www.aprenderaprogramar.com/foros/index.php?topic=1036.msg5860#msg5860

Saludos

ZSCFCP

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
« Respuesta #2 en: 08 de Octubre 2014, 13:58 »
Buenos días a todos.

Estoy siguiendo con sumo interes el curso, y es la primera vez que escribo, queriendo aportar mi forma de resolver el ejercicio de la pagina CU00672B y que me corrijan todo aquello que sea subsanable. Yo para los dialogos he estudiado y utilizado los JOptionPane. Espero les parezca bien:

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.
 */

import javax.swing.JOptionPane;
import java.util.Random;


public class AdivinaNumero
{
    public static void main (String [] Args)
    {

        Integer numOrdenador = new Integer(0);
        Random numAleatorio = new Random();
        numOrdenador = (Integer) (numAleatorio.nextInt(100) + 1);

        String entradaUsuario = new String();
        Integer numUsuario = new Integer();

        boolean adivinado = false;
        boolean rangoCorrecto=true;
       
        while (!adivinado)
        {
            entradaUsuario = JOptionPane.showInputDialog(null,"Se ha generado un número aletatorio entero entre 1 y 100, intente adivinarlo (Pulse 'N' para salir)");
                       
            if (Comunes.isNumeric(entradaUsuario))
            {
                numUsuario = numUsuario.valueOf(entradaUsuario);
               
                if (numUsuario < 1 || numUsuario > 100)
                {
                    JOptionPane.showMessageDialog(  null,"El nº a introducir debe estar comprendido entre el 1 y el 100",
                                                    "¡¡¡ ERROR !!!",JOptionPane.ERROR_MESSAGE );
                    rangoCorrecto=false;
                } else {
                    rangoCorrecto=true;
                }
                if (numUsuario.equals(numOrdenador))
                {
                    JOptionPane.showMessageDialog(  null,"¡¡¡ Enhorabuena, lo ha adivinado !!!",
                                                    "¡¡¡ ACIERTO !!!",JOptionPane.INFORMATION_MESSAGE );
                    adivinado = true;
                }
                if (numUsuario>numOrdenador && rangoCorrecto)
                {
                    JOptionPane.showMessageDialog(  null, "No has acertado: el número a adivinar es menor de " + entradaUsuario + ". Prueba otra vez",
                                                    "¡ SIGUE INTENTANDOLO !",JOptionPane.WARNING_MESSAGE );

                }
                if (numUsuario<numOrdenador && rangoCorrecto)
                {
                    JOptionPane.showMessageDialog(  null,"No has acertado: el número a adivinar es mayor de " + entradaUsuario + ". Prueba otra vez",
                                                    "¡ SIGUE INTENTANDOLO !",JOptionPane.WARNING_MESSAGE );

                }               
                   
            } else {
                if (entradaUsuario.equals("N"))
                {
                    adivinado=true;
                } else {
                    JOptionPane.showMessageDialog(  null,"Introdujo caracteres alfabéticos. Sólo puede teclear un numero entre 1 y 100",
                                                    "¡¡¡ ERROR !!!",JOptionPane.ERROR_MESSAGE );
                }
            }
        }
        JOptionPane.showMessageDialog(  null,"¡¡¡ Hasta pronto !!!","¡GRACIAS!",JOptionPane.INFORMATION_MESSAGE );         
    }
}

Muchas gracias de antemano! y enhorabuena por la web!

ZSCFCP

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
« Respuesta #3 en: 08 de Octubre 2014, 14:04 »
ah por cierto!, se me paso informarles que utilizo en mi código una clase y metodo que no esta expuesto. Lo vi buscando por la red y lo añadí a mi proyecto. El metodo sirve para saber si lo introducido por teclado por el usuario se tratan o no de numeros, de manera que hagamos posteriormente una conversión con garantías:

Citar
/**
 * Clase para utilidades comunes
 */
public class Comunes
{
    public Comunes() {}
   
    public static boolean isNumeric(String cadena)
    {
        try {
            Integer.parseInt(cadena);
            return true;
        } catch (NumberFormatException nfe){
            return false;
    }
    }
}

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
« Respuesta #4 en: 08 de Octubre 2014, 20:56 »
Hola ZSCFCP
Tu código funciona al 100%. Y controlando la pulsación de teclas no deseadas OK

Me gusta la presentación con el JOptionPane

Supongo que has hecho un código con lo necesario para la gestión del número, dejando aparte detalles que te comento.

Aunque hay disponible un botón Cancelar para salir. Indicas que también se puede salir del programa pulsando 'N' pero no funciona con n minúscula.

Cada vez que introduces un número y no es el correcto, al volver a presentarse la ventana, ésta no tiene el foco y hay que seleccionarla con el ratón y luego escribir.
Esto hace el efecto de que el programa se desentiende del usuario en cada intento. Sería más amigable que al presentarse la ventana acaparase las pulsaciones del teclado.

Saludos

ZSCFCP

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 8
    • Ver Perfil
Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
« Respuesta #5 en: 09 de Octubre 2014, 14:25 »
Gracias por los comentarios.

La verdad es que puse la "N" para salir ya que aun no controlo lo del boton cancelar, las excepciones y demas.

En cuanto al foco me pasa lo mismo. Desconozco la forma de controlarlo (aun).

 

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