Autor Tema: CU00669B ARRAYS JAVA cannot find symbol- method method equalsIgnoreCase  (Leído 4225 veces)

Martin

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola, este es el código que hice del ejercicio.. El tema es que cuando lo quiero compilar me tira el error "cannot find symbol- method method esqualsIgnoreCase(java.lang.String)" y no me doy cuenta que es lo que esta mal!!!
Si en vez de usar "equalsIgnoreCase" uso solo "equals", se compila sin errores, pero el programa no detecta cuando se acierta el mes..y sigue pidiendo otra entrada.
alguien me podría ayudar??

Gracias!!

Código: [Seleccionar]
public class AdivinaMes {

    public static void main (String[]Args){

        String MesesA[]={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
       
        String mesSecreto=MesesA[(int)(Math.random()*12)];
       
        System.out.println(mesSecreto);       
        System.out.println("Adivine el mes secreto. Introduzca el nombre del mes completo:");
        EntradaDeTeclado entrada1=new EntradaDeTeclado();
       
        int i=0;
        while(i==0){
            if(entrada1.equalsIgnoreCase(mesSecreto)){System.out.println("¡Ha acertado!");
            i=1;}
                else{System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");
            EntradaDeTeclado entrada2=new EntradaDeTeclado();
            entrada2=entrada1;}
           
        }
        System.out.println("Fin.");
    }
}
« Última modificación: 11 de Noviembre 2014, 21:18 por Jorge lopez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:CU00669B ARRAYS JAVA cannot find symbol- method method equalsIgnoreCase
« Respuesta #1 en: 03 de Noviembre 2014, 15:26 »
 Hola Martin!

Hace falta el código de la clase EntradaDeTeclado para poder compilar tu ejercicio y así poder ayudarte, publica todo el código relacionado a tus ejercicios para nosotros poder hacer un analisis completo, de ante mano te digo que veo algunos errores lógicos en la clase AdivinaMes los cuales comentare cuando suministres el resto del código faltante (clase EntradaDeTeclado y cualquier otra clase relacionada a este ejercicio, si existe)

Saludos!
« Última modificación: 11 de Noviembre 2014, 21:19 por Jorge lopez »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Martin

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:CU00669B ARRAYS JAVA cannot find symbol- method method equalsIgnoreCase
« Respuesta #2 en: 09 de Noviembre 2014, 23:02 »
Hola Jorge, gracias por la respuesta. Aca paso el codigo completo:
Saludos!

EntradaDeTeclado (es el mismo que ustedes proponen en el curso)

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
 
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
        pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
 
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();     } //Cierre del método pedirEntrada
 
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
    public String getPrimeraPalabra ()  {
       /*IMPORTANTE: EN JAVA LOS OBJETOS NO SE PUEDEN COMPARAR USANDO == POR ESO ESTO NO FUNCIONARÁ       
          if (entradaTeclado.substring(0,1)=="j") {
          System.out.println ("Hemos detectado una j");
          } else { System.out.println ("Mira esto:" + entradaTeclado.substring(0,1) ); }*/ 
        for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra
 
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud
} //Cierre de la clase

AdivinaMes

Código: [Seleccionar]
public class AdivinaMes {

    public static void main (String[]Args){

        String MesesA[]={"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
       
        String mesSecreto=MesesA[(int)(Math.random()*12)];
       
        System.out.println(mesSecreto);       
        System.out.println("Adivine el mes secreto. Introduzca el nombre del mes completo:");
        EntradaDeTeclado entrada1=new EntradaDeTeclado();
       
        int i=0;
        while(i==0){
            if(entrada1.equalsIgnoreCase(mesSecreto)){System.out.println("¡Ha acertado!");
            i=1;}
                else{System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");
            EntradaDeTeclado entrada2=new EntradaDeTeclado();
            entrada2=entrada1;}
           
        }
        System.out.println("Fin.");
    }
}
« Última modificación: 11 de Noviembre 2014, 21:20 por Jorge lopez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:CU00669B ARRAYS JAVA cannot find symbol- method method equalsIgnoreCase
« Respuesta #3 en: 11 de Noviembre 2014, 15:09 »
 Hola nuevamente Martin!

Para que puedas entender lo que pasa en tu código relacionado al error en compilación cannot find symbol- method method equalsIgnoreCase es necesario que comprendas algunas diferencias las cuales te explicare.

El metodo equals es un método cuya funcion es comparar la igualdad (semejanza, parentesco, ext..) entre dos objetos retornando como resultado un valor booleano, true en caso de que los objetos comparados sean iguales y false en caso contrario.

Este método puede ser invocado desde cualquier objeto para compararlo con otro objeto. Debemos recordar que en java trabajamos con objetos y que disponemos y podemos crear miles de tipos de objetos de diferentes tipos, por ejemplo: podemos crear objetos de una clase Persona, de una clase Medico, de una clase Casa, de una clase Scanner, y de miles de clases mas los cuales podríamos comparar usando el método equals.

Un String como: "enero" es un tipo objeto, en java un String (cadena de texto o caracteres) es un tipo especial el cual se trata como objeto, por tanto un código como:
Código: [Seleccionar]
String entrada = "enero";
Persona objetoPersona = new Persona();
if(entrada.equals(objetoPersona)){System.out.println("son iguales");}else{System.out.println("son diferentes");}
compilaría sin problemas, porque estamos comparando dos objetos, uno de tipo persona y una cadena de texto de tipo String. Esto corrobora lo que dices:
Citar
Si en vez de usar "equalsIgnoreCase" uso solo "equals", se compila sin errores, pero el programa no detecta cuando se acierta el mes..y sigue pidiendo otra entrada.
donde a pesar de que el código compila (porque estas usando equals para comparar dos objetos) el bucle while nunca tendrá salida aun cuando el usuario acierte el mes secreto, porque? Porque le has indicado al programa que el bucle terminara cuando entrada1 sea igual a mesSecreto (lo que altera el valor de i a 1) . entrada1 es un tipo EntradaDeTeclado y mesSecreto es un tipo String, por tanto nunca serán iguales, por tal motivo en este caso tu programa entraría en un bucle infinito.

El método equalsIgnoreCase a diferencia del metodo equals que compara cualquier tipo de objetos, solo compara objetos tipo String (cadenas de texto) por tal motivo cuando usas una sentencia como:
Código: [Seleccionar]
if(entrada1.equalsIgnoreCase(mesSecreto)){...} el código no compila, porque entrada1 es del tipo EntradaDeTeclado y mesSecreto es del tipo String y el método equalsIgnoreCase esta esperando dos tipos String para compararlos.

Aun corrijamos el error cannot find symbol- method method equalsIgnoreCase tu clase AdivinaMes presenta otras irregularidades y/o debilidades que merecen ser comentadas.

1ro: Estas imprimiendo por pantalla la variable mesSecreto antes de que el usuario intente adivinar el mes secreto, y desde ese momento deja de ser un mes secreto  ;)

2do: Creas una variable entrada1 y luego creas otra variable entrada2, en realidad con una sola variable (de nombre "entrada" por ejemplo) del tipo EntradaDeTeclado seria mas que suficiente.

3ro: Creas una variable int i; que prácticamente esta de mas para "controlar" la salida del bucle.

4to: No creas una variable (que si deberias crear) de tipo String para que almacene el String escrito por el usuario la cual seria usada para comparar en el condicional if dentro del bucle while, seria como decirle al programa: si lo que escribe el usuario es igual al mes secreto sin importar diferencias de mayúsculas y/o minúsculas (equalsIgnoreCase) has tal cosa.. Con la creación de esta nueva variable String y su correcto uso en el condicional if, eliminamos el error cannot find symbol- method method equalsIgnoreCase.

Al diseñar un código, debemos de tratar de que sea lo mas corto y claro posible, por eso es un abito positivo en un buen programador, la reutilizacion de código que no es mas que reutilizar un mismo recurso (variable, método, ext..) siempre que sea posible, antes de crear código (variable, método, ext..) nuevo.

A continuación dejo el código de tu clase AdivinaMes editado con algunas mejorías las cuales estarán comentadas en el código, te sugiero que analices cada punto y como siempre, si tienes alguna duda no dudes en preguntar.

Código: [Seleccionar]
public class AdivinaMes {

    public static void main (String[] Args)
    {

        String MesesA[] = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"};
       
        String mesSecreto = MesesA[(int)(Math.random()*12)];       
        System.out.println("Adivine el mes secreto.\nPorfavor introduzca el nombre de un mes:");
        EntradaDeTeclado entrada = new EntradaDeTeclado();
       
        String mes = entrada.getEntrada();/*Esta variable almacena lo que escriba el usuario por teclado, invocamos el metodo getEntrada()
        de la clase EntradaDeTeclado que nos devuelve el String escrito por el usuario para almacenarlo en esta variable "mes"*/
       
        while(!mes.equalsIgnoreCase(mesSecreto))/*el operador "!" antepuesto a la variable mes, hace que el valor booleano devuelto por
        la instruccion "while(mes.equalsIgnoreCase(mesSecreto))" sea su valor contrario, con esto sustituimos la variable int i; que daba salida
        al bucle.*/
        {
           if(!mes.equalsIgnoreCase(mesSecreto))
           {
                System.out.println("No ha acertado. Intente adivinarlo introduciendo otro mes: ");
                entrada.pedirEntrada();/*En lugar de crear una nueva variable entrada2 para crear un nuevo objeto EntradaDeTeclado, invocamos
                el metodo pedirEntrada() sobre el mismo objeto que ya aviamos creado, esto se conoce como reutilizacion de código.*/
                mes = entrada.getEntrada();
            }
        }
        System.out.println("\f\n¡Ha acertado! el mes secreto era " + mesSecreto + ".\n\nFin.");
    }
}
Saludos!
« Última modificación: 11 de Noviembre 2014, 21:26 por Jorge lopez »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

 

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".