Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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.
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!!!");
}
}
-
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
-
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:
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 :
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 :
//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.
-
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
-
Hola Toni_apr:
Gracias por la solución y los consejos.
Un saludo,