La variable
entrada, ya es un
int. Así que hacerle un parseInt() es innecesario, porque ya es un int.
int entrada = entradaScanner.nextInt();
if (numero == Integer.parseInt(entrada)){
De todos modos, intentas comparar
entrada, que es
int, con
numero que es de la clase
adivinarNumeroNo puedes compararlos, son cosas distintas. Aunque ambos sean valores numéricos, no se pueden comparar directamente porque están modelados de formas distintas.
entrada es un
int primitivo, básicamente es un trocito de memoria RAM que ocupa 32 bit.
numero es un
objeto adivinarNumero, al ser una clase POO, es algo mucho más complejo que una simple dirección de memoria reservada.
Por eso no se pueden comparar, al menos no directamente.
Parte del problema radica en que quizás estás buscando una solución más compleja de lo necesario.
El número secreto, o sea, el número que hay que adivinar, no tiene porque ser una clase POO.
Basta con que sea un simple int, igual que el número que ingresará el usuario. La diferencia es que uno va a proceder del teclado del usuario y el otro nos lo dará un objeto Random.
Esta podría ser la forma sencilla de solucionarlo. Añado algo importante que tú no habías puesto, un bucle que se repita hasta que el usuario haya acertado el número secreto:
public class AdivinarNumero {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
Random azar = new Random();
int numSecreto = azar.nextInt(100) + 1;
boolean acertado = false;
while(!acertado) {
System.out.print("Acierta un numero entre 1 y 100: ");
int numero = teclado.nextInt();
if (numero == numSecreto) {
System.out.println("Enhorabuena! Has acertado");
acertado = true; //Esto pondrá fin al bucle
}
else if (numero < numSecreto)
System.out.println("Fallaste! El numero es mayor");
else
System.out.println("Fallaste! El numero es menor");
}
teclado.close();
System.out.println("\n\t\tFIN DE PROGRAMA");
}
}
Como ves, aquí no hay ningún problema en comparar los números, porque ambos son int.
Y con esto es suficiente.
Sin embargo, vamos a darle una vuelta de tuerca. Vamos a seguir tu planteamiento de hacer que el número "secreto", sea una clase POO.
Por ejemplo, esta:
public class NumeroSecreto {
private int secreto;
public NumeroSecreto() {
Random azar = new Random();
secreto = azar.nextInt(100) + 1;
}
public int getSecreto() {
return secreto;
}
}
Al construir un objeto de esta clase, obtendremos un int con un valor generado por un Random.
Si lo aplicamos en el programa principal, ahora las comparaciones (marco en rojo) nos van a dar error:
public class AdivinarNumero {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
NumeroSecreto numSecreto = new NumeroSecreto();
boolean acertado = false;
while(!acertado) {
System.out.print("Acierta un numero entre 1 y 100: ");
int numero = teclado.nextInt();
if (numero == numSecreto) {
System.out.println("Enhorabuena! Has acertado");
acertado = true; //Esto pondrá fin al bucle
}
else if (numero < numSecreto)
System.out.println("Fallaste! El numero es mayor");
else
System.out.println("Fallaste! El numero es menor");
}
teclado.close();
System.out.println("\n\t\tFIN DE PROGRAMA");
}
}
¿Por qué da error si el número secreto, en esencia, es un int?
Sí, el numero secreto es un atributo int, pero está
"encapsulado" en una clase POO y eso hace que no se pueda comparar
directamente con otros int.
Directamente no..., pero, hay otra forma.
Tú intentaste usar el método Integer.parseInt(). Bien, pues no sirve en este caso.
Este método solo puede convertir objetos String a Integer(int).
Pero no podemos pedirle que haga lo mismo con un objeto NumeroSecreto.
En realidad, no necesitamos ayuda externa. Nuestra clase NumeroSecreto ya tiene un método get() que nos puede retornar el atributo int que tenemos encapsulado.
Así que basta con invocar este método para poder comparar con "simples int".
public class AdivinarNumero {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
NumeroSecreto numSecreto = new NumeroSecreto();
boolean acertado = false;
while(!acertado) {
System.out.print("Acierta un numero entre 1 y 100: ");
int numero = teclado.nextInt();
if (numero == numSecreto.getSecreto()) {
System.out.println("Enhorabuena! Has acertado");
acertado = true; //Esto pondrá fin al bucle
}
else if (numero < numSecreto.getSecreto())
System.out.println("Fallaste! El numero es mayor");
else
System.out.println("Fallaste! El numero es menor");
}
teclado.close();
System.out.println("\n\t\tFIN DE PROGRAMA");
}
}
Listo.
Espero haber aclarado tus dudas. Si no fuera así, no dejes de preguntar.
Un saludo.