Autor Tema: EJERCICIO CU00672B, Ejemplo generar números aleatorios en Java juego adivinar  (Leído 4325 veces)

urdaneta88

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
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!!!");
    }
}

« Última modificación: 17 de Marzo 2015, 09:27 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:EJERCICIO CU00672B, Generar números aleatorios en Java.
« Respuesta #1 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

richardpc2013

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
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.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
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

richardpc2013

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola Toni_apr:

Gracias por la solución y los consejos.

Un saludo,

 

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