Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Pasandav en 23 de Octubre 2015, 18:46
-
Dejo mi código:
Espero consejos.
Muchas gracias. :D
import java.util.Scanner;
/**
* Write a description of class MesSecreto here.
*
* @author (David Martinez)
* @version (a version number or a date)
*/
public class MesSecreto
{
// instance variables - replace the example below with your own
private String registroTeclado;
/**
* Constructor for objects of class MesSecreto
*/
public MesSecreto()
{
}
public static void main (String [] arg)
{
Scanner teclado = new Scanner (System.in);
String mes[] = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
String mesSecreto = mes[1];
System.out.println("Adivine el mes secreto. Introduzca el nombre del mes en minúsculas: ");
String respuesta=teclado.nextLine();
while (respuesta != mesSecreto)
{
if (respuesta.equals(mesSecreto))
{ System.out.println("!Has acertado!");
respuesta=mesSecreto;
}
else
{
System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes:");
respuesta=teclado.nextLine();
}
}
}
}
-
Hola David, esta condición while (respuesta != mesSecreto) está mal expresada. respuesta es un String (un objeto, no es un tipo primitivo) y los String no se pueden comparar usando == ni !=
Para comparar objetos hemos de usar equals
while (respuesta.equals( mesSecreto) == false)
También es válido while (!respuesta.equals( mesSecreto))
El cambio obliga a modificar ligeramente la lógica para que el programa funcione bien quedaría así:
import java.util.Scanner;
public class MesSecreto {
// instance variables - replace the example below with your own
private String registroTeclado;
/**
* Constructor for objects of class MesSecreto
*/
public MesSecreto() { }
public static void main (String [] arg)
{
Scanner teclado = new Scanner (System.in);
String mes[] = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
String mesSecreto = mes[1];
System.out.println("Adivine el mes secreto. Introduzca el nombre del mes en minúsculas: ");
String respuesta="";
while (!respuesta.equals( mesSecreto)) {
respuesta=teclado.nextLine();
if (respuesta.equals(mesSecreto))
{ System.out.println("!Has acertado!");
respuesta=mesSecreto;
}
else
{
System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes:");
}
}
}
}
Saludos
-
Gracias por la respuesta!
Lo que no entiendo es.... ¿No se puede comparar un String con == o !=, por convención? Porque el programa funcionaba correctamente, quiero decir... no me daba ni error en tiempo de ejecución ni al compilar....
Gracias otra vez y.. !Siento dar tanto mal!
-
Hola, no te preocupes porque aquí estamos para aprender :D
No se puede comparar usando == ni != por lo que se explica en http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=628:el-metodo-equals-en-java-diferencia-entre-igualdad-e-identidad-comparar-objetos-ejemplos-cu00662b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188
Llegamos a conclusiones importantes:
1) La comparación usando == no se debe usar para comparar el “contenido” de los objetos, sino únicamente para comparar la información de las variables apuntadoras. Usar == para comparar objetos es un error frecuente en programadores con poca experiencia.
2) Para comparar el contenido de los objetos hemos de usar, en general, un método especial del que disponen todos los objetos denominado equals.
Saludos
-
Joer... Cada día me alegro más de haber encontrado estos foros!!
MUCHAS GRACIAS, por la rapidez y los consejos!!!