Ayuda con este método.

Iniciado por Aikanáro Anário, 4 Octubre 2011, 04:28 AM

0 Miembros y 1 Visitante están viendo este tema.

Aikanáro Anário

#10
Bueno, al final, terminé haciendo otro método distinto para lo mismo. Es que cuando intentaba usar el tuyo tenía problema con los espacios, salían todas las letras juntas y el método dibujar no me funcionaba bien, seguro fue que me confundí en algo porque es un pelín diferente imprimir el texto en la interfaz, pero bueno....
el caso es que ahora tengo este método:

Código (java) [Seleccionar]

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[]
System.out.println("la letra pasa a char:" +letra[0]);
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
System.out.println(index);
}
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]);
System.out.println("Fallos: " +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?  :rolleyes:  ;D

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"
Citarlongitud 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)

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í :-/
Lo que faltaba en internet: http://binar10s.blogspot.com/

|Miguel|

Si te interesa para comparar, tengo por ahí un ahorcado que hice en C.