Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Pasandav en 23 de Octubre 2015, 18:46

Título: Java los String no se pueden comparar con == igual o != distinto CU00669B
Publicado por: Pasandav en 23 de Octubre 2015, 18:46
Dejo mi código:

Espero consejos.

Muchas gracias.  :D
Código: [Seleccionar]
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();
                }
        }
    }
}
Título: Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
Publicado por: Alex Rodríguez en 26 de Octubre 2015, 12:44
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í:

Código: [Seleccionar]
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
Título: Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
Publicado por: Pasandav en 26 de Octubre 2015, 14:22
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!

Título: Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
Publicado por: Alex Rodríguez en 26 de Octubre 2015, 14:34
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

Citar
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
Título: Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
Publicado por: Pasandav en 26 de Octubre 2015, 14:47
Joer... Cada día me alegro más de haber encontrado estos foros!!

MUCHAS GRACIAS, por la rapidez y los consejos!!!