Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: momo en 30 de Septiembre 2014, 20:02
-
/*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
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
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
-
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
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
-
Con respecto a :
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
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:
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:
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)
-
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
-
Muchas Gracias Amigo Saludos ..