Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: urdaneta88 en 15 de Marzo 2015, 22:18

Título: EJERCICIO CU00672B, Ejemplo generar números aleatorios en Java juego adivinar
Publicado por: urdaneta88 en 15 de Marzo 2015, 22:18
Todavía me confundo un poco con los tipos de datos que se pueden comparar y convertir, hay alguna forma en que los datos que se piden por consola los pueda capturar como enteros sin tener que hacer tantas conversiones?

En la solución del ejercicio lo hice sin y con la clase de EntradaDeTeclado, aquí dejo la solución sin usar la clase.

Saludos.

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

public class AdivinaNumero{
   public static void main(String [] Args){
       Random numeroA = new Random();
       int numeroSecreto = numeroA.nextInt(100)+1;
       Scanner entradaS = new Scanner(System.in);
       System.out.println("Se ha generado un numero aleatorio entre 1 y 100, intente adivinarlo.");
       String entradaT = entradaS.nextLine();
       Integer entradaNumero = 0;
       entradaNumero = entradaNumero.valueOf(entradaT);
       while (!(entradaNumero.equals(numeroSecreto))){
           System.out.print("No has acertado");
           if(entradaNumero> numeroSecreto){
                System.out.println(": el numero es menor. prueba otra ves");
            }
            else{
                System.out.println(": el numero es mayor. prueba otra ves");
            }
            entradaT = entradaS.nextLine();
            entradaNumero= entradaNumero.valueOf(entradaT);
        }
       
       System.out.println("Has acertado!!!");
    }
}

Título: Re:EJERCICIO CU00672B, Generar números aleatorios en Java.
Publicado por: toni_apr en 16 de Marzo 2015, 15:55
Hola urdaneta

Ejercicio correcto.

Si, usa el método nextInt() para el objeto entradaS.
Puedes ver más información de la clase Scanner en el API de Java
http://docs.oracle.com/javase/6/docs/api/

Saludos
Título: Re:EJERCICIO CU00672B, Ejemplo generar números aleatorios en Java juego adivinar
Publicado por: richardpc2013 en 26 de Marzo 2015, 19:36
Hola toni_apr:

Con la respuesta que le has dado a la pregunta que hizo urdaneta88 de usar el método nextInt() he creado las siguientes clases:

Para la Clase entrada de Teclado:

Código: [Seleccionar]
import java.util.Scanner; //Importación de la clase Scanner desde la biblioteca Java
public class EntradaDeTeclado2 {  // Definimos la clase EntradaDeTeclado aprenderaprogramar.com
    private int entradaTeclado; //Variable de instancia (campo) del método
 
    //Constructor
    public EntradaDeTeclado2 ()  {
        entradaTeclado=0; } //Cierre del constructor
 
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
          int entradaTeclado = entradaEscaner.nextInt ();    // Dará la entrada como INT primitivo
           System.out.println ("valor devuelto desde la entrada del teclado :"  + entradaTeclado);
    } //Cierre del método pedirEntrada
 
    public int getEntrada () {
        System.out.println ("valor devuelto desde el get del teclado :"  + entradaTeclado);
        return entradaTeclado;
 } //Cierre del método getEntrada
} //Cierre de la clase

La Clase del Main :

Código: [Seleccionar]
public class AdivinaNumero {
    public static void main (String [ ] Args) {
        Integer tmpInteger = 0;
        EntradaDeTeclado2 entradaMain = new EntradaDeTeclado2();
            System.out.println ("Bienvenido al programa ADIVINA el NÜMERO !!!");
            System.out.println ("Intenta adivinar el número entre 1 y 100. ");
            SerieDeAleatorios2 serieDePrueba = new SerieDeAleatorios2 ( (int) 1);   // aquí paso la variable con el valor primitivo de la misma
            serieDePrueba.generarSerieDeAleatorios();
            int numAlea = serieDePrueba.getNumero() + 1;
            System.out.println ("El número aleatorio es :" + numAlea);
            System.out.print ("Teclea un número: ");                   
            entradaMain.pedirEntrada();
           tmpInteger = entradaMain.getEntrada() ;
           
           
             while ( tmpInteger != numAlea) {
   
                        if ( tmpInteger > numAlea ) {
                                System.out.println ("No has acertado: el número es menor. Prueba otra vez");
                            }
                                else {
                                System.out.println ("No has acertado: el número es mayor. Prueba otra vez");
                               }
                   
                    System.out.print ("Teclea un número: ");                   
                    entradaMain.pedirEntrada();
                     tmpInteger = entradaMain.getEntrada() ;
                     
             }        // Cierre del while

                    System.out.println ("BIEN !!!! has acertado el número " + numAlea);
                    System.out.println ("Gracias por utilizar el programa");
            } // Cierre del main
    }   //Cierre de la clase

Y la clase que genera el número aleatorio :

Código: [Seleccionar]
        //Esta clase define objetos que contienen tantos enteros aleatorios entre 1 y 100 como se definan
public class SerieDeAleatorios2 {
    //Campos de la clase
    private ArrayList<Integer> serieAleatoria;
 
    //Constructor
    public SerieDeAleatorios2 (int numeroItems) {
        serieAleatoria = new ArrayList<Integer> ();
        //Inicializamos el ArrayList lleno de ceros
        for (int i=0; i<numeroItems; i++) { serieAleatoria.add(0); }
        //System.out.println ("Serie inicializada. El número de elementos en la serie es: " + getNumeroItems() );
    } //Cierre del constructor
 
    public int getNumeroItems() { return serieAleatoria.size(); } //Cierre del método
 
    public void generarSerieDeAleatorios () {
        Random numAleatorio;
        numAleatorio = new Random ();
        for (int i=0; i < serieAleatoria.size(); i++) {
        serieAleatoria.set(i, numAleatorio.nextInt(100) );
         }
        //System.out.print ("Serie generada! ");
    } //Cierre del método
 
    public int getNumero () { //Método devuelve el único valor generado por Random
                return serieAleatoria.get(0);
    } //Cierre del método 

    public void mostrarSerie() {
        System.out.print ("Procedemos a mostrar la serie: ");
        for (Integer tmpObjeto :  serieAleatoria) {  //Uso de for each
           System.out.print ("   " + tmpObjeto.toString() );   } //Cierre del for extendido
           // System.out.print ("   " + tmpObjeto );   } //Cierre del for extendido           
    } //Cierre del método
} //Cierre de la clase

Al compilar no hay problema ninguno, pero cuando lo ejecuto, descubro que el get de la clase teclado me devuelve el valor 0, sin embargo cuando lo tecleo por el terminal veo que la variable entradaTeclado guarda el valor. ¿Que puede estar mal? o que proceso es erróneo?.  Con String no tengo estos fallos.

Un saludo.
Título: Re:EJERCICIO CU00672B, Ejemplo generar números aleatorios en Java juego adivinar
Publicado por: toni_apr en 27 de Marzo 2015, 20:30
Hola richard

Para solventar, el error en la línea:

           int entradaTeclado = entradaEscaner.nextInt ();    // Dará la entrada como INT primitivo

del método pedirEntrada() en la clase EntradaDeTeclado2, quita el 'int' del principio.

Con este int creabas una variable local independiente del atributo de la clase se siempre era 0.

Tu ejercicio utiliza muchos recursos para manipular un único número aleatorio.
La versión de urdaneta es más compacta.

Saludos
Título: Re:EJERCICIO CU00672B, Ejemplo generar números aleatorios en Java juego adivinar
Publicado por: richardpc2013 en 28 de Marzo 2015, 19:36
Hola Toni_apr:

Gracias por la solución y los consejos.

Un saludo,