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:
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:
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:
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.
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!