Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: ThheMau en 02 de Octubre 2014, 06:28

Título: Ejercicio CU00672B generar aleatorios en java con random y nextInt
Publicado por: ThheMau en 02 de Octubre 2014, 06:28
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
Título: Re:Ejercicio CU00672B
Publicado por: toni_apr 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 (https://www.aprenderaprogramar.com/foros/index.php?topic=1036.msg5860#msg5860)

Saludos
Título: Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
Publicado por: ZSCFCP 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!
Título: Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
Publicado por: ZSCFCP 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;
    }
    }
}
Título: Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
Publicado por: toni_apr 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
Título: Re:Ejercicio CU00672B generar aleatorios en java con random y nextInt
Publicado por: ZSCFCP 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).