Autor Tema: Juego adivinar un número en Java ejercicio CU00672B  (Leído 36885 veces)

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Juego adivinar un número en Java ejercicio CU00672B
« en: 30 de Septiembre 2014, 20:02 »
Citar
 
/*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. Puedes comprobar si tu código es correcto consultando en los foros
 * aprenderaprogramar.com.
 */

   
ADIVINARNUMERO
Código: [Seleccionar]
import java.util.*;
public class AdivinarNumero
{
    public static void main(String[] args)
    {

        int valorBuscar=0;
        EntradaDeTeclado teclado= new EntradaDeTeclado();
        Random cantidadDeNumero=new Random();
        boolean intentos=true;
        for(int i=0;i<=1;i++)
        {
            valorBuscar=cantidadDeNumero.nextInt((100-1+1)+1);
        }
        System.out.println("                 EMPECEMOS EL JUEGO                        ");
        System.out.println("SE HA GENERADO UN NUMERO ALEATORIO COMPRENDIDO ENTRE 1 Y 100\n");
        do
        {           
            System.out.println("INTRODUSCA EL VALOR HA BUSCAR: ");       
            teclado.pedirEntrada();
            int convertir=Integer.parseInt(teclado.getEntrada());
            if(convertir==(valorBuscar))
            {
                System.out.println("BIEN... HAS ACERTADO AMIGO  :)");
                intentos=false;
            }
            else if(convertir<=valorBuscar)
            {
                System.out.println(" NO HAS HACERTADO EL NUMERO ES MAYOR. INTENTALO DE NUEVO AMIGO:\n");
                intentos=true;
            }
            else if(convertir>=valorBuscar)
            {
                System.out.println(" NO HAS HACERTADO EL NUMERO ES MENOR. INTENTALO DE NUEVO AMIGO:\n");
                intentos=true;
            }
        } while(intentos);

    }
    }

ENTRADATECLADO
Código: [Seleccionar]
import java.util.Scanner; //Importación de la clase Scanner desde la biblioteca Java
public class EntradaDeTeclado {  // Definimos la clase EntradaDeTeclado aprenderaprogramar.com
    private String entradaTeclado; //Variable de instancia (campo) del método
 
    //Constructor
    public EntradaDeTeclado ()  {
        entradaTeclado=""; } //Cierre del constructor
 
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
    } //Cierre del método pedirEntrada
 
    public String getEntrada () {
        return entradaTeclado;
 } //Cierre del método getEntrada
} //Cierre de la clase
« Última modificación: 01 de Octubre 2014, 10:45 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00672B
« Respuesta #1 en: 30 de Septiembre 2014, 21:45 »
Hola momo
Tu programa funciona, pero tiene algunas deficiencias.

En primer lugar, tu código genera un número aleatorio entre 0 y 100.
¿Es un despiste, o no sabes como poner los límites entre 1 y 100?

Esta expresión
nextInt((100-1+1)+1)
es igual que esta
nextInt((99+1)+1)
y esta
nextInt((100)+1)
y esta
nextInt(101)

En la página del ejercicio se muestra que hace el método que genera números aleatorios
Citar
nextInt(int n)  Devuelve un pseudoaleatorio de tipo int comprendido entre cero (incluido) y el valor especificado (excluido).

Te propongo que escribas la instrucción que genere un número aleatorio entre 14 y 83 o entre -11 y 21.
La cita anterior te servirá para crearla
También puedes pedir ayuda en el foro

En segundo lugar
Para crear este número aleatorio utilizas un bucle con dos iteraciones.
¿Esperabas conseguir algo especial?
Creo que el bucle for te sobra. La siguiente instrucción se basta y se sobra para generar el número aleatorio
valorBuscar=cantidadDeNumero.nextInt((100-1+1)+1);

El resto del código, perfecto

Quiero proponerte momo que hagas una versión mejorada de la clase donde elimines código innecesario y utilices una expresión idónea para generar el número aleatorio.

Saludos
« Última modificación: 30 de Septiembre 2014, 21:49 por toni_apr »

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Re:CU00672B
« Respuesta #2 en: 01 de Octubre 2014, 05:26 »
Con respecto a :
Citar
En primer lugar, tu código genera un número aleatorio entre 0 y 100.
¿Es un despiste, o no sabes como poner los límites entre 1 y 100?

Bueno amigo no fue un despiste  lo que ocurrió fue que busque la información errónea  en Internet

me guié por una construcción que vi donde

cantidadDeNumero.nextInt((Hasta-Desde+1)+Desde);=cantidadDeNumero.nextInt((100-1+1)+1);

y por lo visto de igual manera genera un numero aleatorio comprendido entre 0 y 100.

Ahora la Solución que le halle fue realizando la siguiente instrucción que es

Citar
int valorBuscar= 1 + cantidadDeNumero.nextInt(101);

Que Hace esta instrucción empieza a contar desde 1 hasta 101 eso da un total de 100 numero en lo cual se toma como (limite inicial :  1) y como (limite final :  el ultimo numero que genera el contador  que es  100);

Con respecto ha:
Citar
En segundo lugar
Para crear este número aleatorio utilizas un bucle con dos iteraciones.
¿Esperabas conseguir algo especial?
Creo que el bucle for te sobra. La siguiente instrucción se basta y se sobra para generar el número aleatorio
valorBuscar=cantidadDeNumero.nextInt((100-1+1)+1);

Fue un error colocar el bucle for no es necesario en realidad y no esperaba conseguir algo en especial .

En Tal Caso de que el bucle for se necesitara seria si el enunciado pidiera que mostrara mas de un numero aleatorio :) --> creo que seria el buen uso del for si no me equivoco

y con respecto a la instrucción que me propusiste que la realizara desde 14 hasta 83
Esta Realizada en comentario :)

Ejercicio Modificado:
Código: [Seleccionar]

import java.util.*;
public class AdivinarNumero
{
    public static void main(String[] args)
    {

        EntradaDeTeclado teclado= new EntradaDeTeclado();
        Random cantidadDeNumero=new Random();
        boolean intentos=true;
        int valorBuscar= 1 + cantidadDeNumero.nextInt(101);//int valorBuscar= 14 + cantidadDeNumero.nextInt(70);       
        System.out.println("                 EMPECEMOS EL JUEGO                        ");
        System.out.println("SE HA GENERADO UN NUMERO ALEATORIO COMPRENDIDO ENTRE 1 Y 100\n");
        do
        {           
            System.out.println("INTRODUSCA EL VALOR HA BUSCAR: ");       
            teclado.pedirEntrada();
            int convertir=Integer.parseInt(teclado.getEntrada());
            if(convertir==(valorBuscar))
            {
                System.out.println("BIEN... HAS ACERTADO AMIGO  :)");
                intentos=false;
            }
            else if(convertir<=valorBuscar)
            {
                System.out.println(" NO HAS HACERTADO EL NUMERO ES MAYOR. INTENTALO DE NUEVO AMIGO:\n");
                intentos=true;
            }
            else if(convertir>=valorBuscar)
            {
                System.out.println(" NO HAS HACERTADO EL NUMERO ES MENOR. INTENTALO DE NUEVO AMIGO:\n");
                intentos=true;
            }
        } while(intentos);

    }
}

Espero que ahorita si haya acertado con el ejercicio
Muchas Gracias Por Tus Observaciones Amigo  8)


toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Juego adivinar un número en Java ejercicio CU00672B
« Respuesta #3 en: 01 de Octubre 2014, 20:04 »
Hola momo
Si, en el comentario has resuelto bien crear un número aleatorio entre 14 y 83 ambos incluidos, pero te descuidaste al crear el aleatorio para el ejercicio.

cantidadDeNumero.nextInt(101) -> esto tiene dos valores extremos posibles cero y cien, si a estos dos valores les sumas uno, tendrás uno y ciento uno.

A la hora de generar un número aleatorio tal vez no hace falta ser preciso. Si el rango de valores obtenidos es mayor o menor del deseado no suele haber inconvenientes, salvo que nuestra aplicación necesite valores bien definidos. En ese caso si hemos de apurar bien los límites.

He revisado la construcción como dices tu que encontraste en internet
cantidadDeNumero.nextInt((Hasta-Desde+1)+Desde);
Debiste copiarla mal, debería ser:
cantidadDeNumero.nextInt(Hasta-Desde+1)+Desde;

Saludos

momo

  • Principiante
  • **
  • Mensajes: 64
    • Ver Perfil
Re:Juego adivinar un número en Java ejercicio CU00672B
« Respuesta #4 en: 01 de Octubre 2014, 22:48 »
Muchas Gracias Amigo 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".