el caso es que ahora tengo este método:
Código
public void buscarLetra(){ chequearif = false; string = ""; letra = letraEscogida.toCharArray(); //letra es un vector. la letraEscogida la escoge el usuario desde un combo box //la razon para esta conversion es para poder asignar la letra a arrayGuiones[] int index = 0; for(int i=0;i<(palabraElegida.length());i++){ if(palabraElegida.substring(i, i+1).equals(letraEscogida) == true){ if(chequearif == true){//este if es para cuando una palabra tiene letras repetidas string = ""; index = palabraElegida.indexOf(letraEscogida, index+1); index *= 2; //lo multiplico por dos por los espacios en blanco, para que ocupe la posicion correcta. arrayGuiones[index] = letra[0]; //sustituyo la posicion que ocupa la letra en la palabra secreta por el guion bajo correspondiente } index = palabraElegida.indexOf(letraEscogida); index *= 2; arrayGuiones[index] = letra[0]; for(int j=0;j<arrayGuiones.length;j++){ string += arrayGuiones[j]+""; } lbl_palabra.setText(string); chequearif = true; } } //esta parte no es relevante, por ahora. getLblText(); if(chequearif == false){ fallos=fallos+1; lbl_img.setIcon(imagen[fallos]); if(fallos == 6){ jcb.setEnabled(false); boton.setEnabled(false); } } }
Sí, mucho más complicado y menos eficiente, pero ¡al fin pude hacerlo yo!, vale que eso me tenía sin dormir por varios días xD y todavía lo va a seguir haciendo... porque no sé que pasa, pero no funciona bien con la palabra "gallina", específicamente con la letra "l" (L minúscula). Cuando mandó la letra L, me da un montón de errores. No sé si pasará con más letras porque ahora solo tengo 10 palabras (pato, vaca, gallina, avestrus, canguro, caracol, perro, oveja, aguila, conejo y chivo). Y solo me pasa con gallina. ¿me hechan una mano?
Los System.out.print que hay en el código no son necesarios, solo que me ayudan a depurarlo y a ver lo que pasa internamente.
También pasa con "perro", así que el problema es cuando la letra que se repite van una después de la otra. "r" "r"; "l" ,"l"
Las tres primeras líneas del error dice:
Estos datos son con la palabra "gallina" y cuando envié la letra "a" y después con la "l"
Citar
longitud de array guionesBajos: 14
la letra pasa a char:a
_ _ _ _ _ _ _
primer index: 2
segundo index: 12
primer index: 2
_ a _ _ _ _ a
la letra pasa a char:l
primer index: 4
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -2
at Ahorcaito.buscarLetra(Ahorcaito.java:232)
at Ahorcaito.actionPerformed(Ahorcaito.java:188)
la letra pasa a char:a
_ _ _ _ _ _ _
primer index: 2
segundo index: 12
primer index: 2
_ a _ _ _ _ a
la letra pasa a char:l
primer index: 4
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -2
at Ahorcaito.buscarLetra(Ahorcaito.java:232)
at Ahorcaito.actionPerformed(Ahorcaito.java:188)
Lo que dice primer index, es el valor del index que se ejecuta primero, cuando chequearif es false. el segundo index, es cuando se cumple chequearif es true. La longitud del array de guionesBajos, (o sea las rayitas que representan las letras del programa) es de 14, contando los espacios en blanco.
Si hubiera enviado la letra L los datos deberían ser:
primer index: 4
segundo index: 6
porque la primera posición en la palabra "gallina" de la letra L es 2 y como se múltiplica por 2 = 4. La segunda posicion de la L es 3 y 3*2=6.
El error que me da me dice que el array está fuera de los límites, pero según mi análisis, no es así :-/