Hola Ronal:
Estuve revisando tu ejercicio, y como puntos positivos marcaremos: un correcta inicialización del array, la inclusión de la elección del mes (a adivinar) por parte del usuario, lo cual evidencia en su codificación un mayor entendimiento en el uso del array.
Asimismo señalaremos también algunos conceptos a tener en cuenta que son importantes:
1) El atributo mesSecreto está declarado en una línea, en otra línea se lo inicializa con la sentencia 'new', y en otra línea se le asigna su valor por defecto.
A diferencia de mesSecreto, declaras e inicializas en una misma línea el atributo val.
Pienso que deberías hacer lo mismo entonces con el atributo mesSecreto también, para simplificar el código. Recuerda que los objetos tipo String pueden ser inicializados de una manera más simple, y en este caso en particular bien podríamos declararlo, inicializarlo, y asignarle su valor por defecto con la siguiente línea de código:
String mesSecreto = "";
2) Defines dos atributos tipo Scanner, y bien podríamos haber definido uno solo y utilizarlo cuando sea necesario: primero esperando recibir el mes elegido por el usuario (un valor tipo int), y luego para recibir el intento de adivinación (un valor tipo String).
También relacionado con esto, la consola nos presenta un mensaje diciéndonos que ingresemos un mes en mínusculas. Y la siguiente línea a ejecutarse es:
adivina.nextLine();
en esa línea el programa se queda esperando que ingresemos una cadena String que luego no es usada, no es tenido en cuenta el mes que introducimos en ese pedido. Esta línea no debería existir.
3) Realizar un:
while(true){
no es buena idea, ya que nos obligaría a tener que usar alguna forma de salida que en la mayoría de los casos habría que tratar de evitar (como los break).
Que se entienda bien: los break son una forma válida y lícita de salir de un bucle, pero antes de que hagamos uso de esta sentencia (o de la forma que usaste), deberíamos agotar la posibilidad de salir del bucle while de una manera más elegante y limpia. Esa manera es aquella que evalúe la condición que consignamos entre los paréntesis del while.
Reescbribo tu ejercicio teniendo en cuenta estos puntos que te he mencionado para que lo analices.
package ejemplo;
import java.util.Scanner;
public class TestArray {
public TestArray(){
//Constructor general
}
public static void main (String args[]){
String[] meses = {"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre"
,"octubre","noviembre","diciembre"};//array que contiene meses del año
//declaracion e inicializacion de variables
Scanner valor = new Scanner(System.in);
int val = 0;
String mesSecreto = "";
//elección del mesSecreto
System.out.println("\fIngresa un numero del 0 al 11");
val = valor.nextInt();
valor.nextLine(); // esta línea sirve para limpiar el buffer.
mesSecreto = meses [val];
//introduce el nombre de un mes
System.out.print("Introduzca el nombre del mes en minuscula: ");
//condicion que evalua la informacion ingresada
while(!mesSecreto.equals(valor.nextLine())){
System.out.println("No has acertado. \nIntentalo de nuevo: ");
}
System.out.println("Felicitaciones, has acertado");
} // fin de main
} // fin de la clase
Analiza el código y cualquier duda estamos aquí para revisarlo nuevamente.