Autor Tema: Java los String no se pueden comparar con == igual o != distinto CU00669B  (Leído 7066 veces)

Pasandav

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
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();
                }
        }
    }
}
« Última modificación: 26 de Octubre 2015, 12:44 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
« Respuesta #1 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

Pasandav

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
« Respuesta #2 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!


Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
« Respuesta #3 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

Pasandav

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 39
    • Ver Perfil
Re:Java los String no se pueden comparar con == igual o != distinto CU00669B
« Respuesta #4 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!!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".