Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/06/2010, 00:03
luis10307
 
Fecha de Ingreso: junio-2010
Ubicación: Antofagasta
Mensajes: 5
Antigüedad: 13 años, 11 meses
Puntos: 0
Mensaje Respuesta: Extraño Suceso en Java

Cita:
Jaja oye gracias, pero la verdad no me ayudaste en nada...jajajaja
Si "no te ayude en nada", aplicando la doble negación de la lógica proposicional: <<¿te ayudé en todo?>>

Cita:
lo q pasa es q estoy comparando el contenido de un Jtextfield con una palabra, osea el programa en si es una sopa de letas, cada cadrito de la sopa de letras es un objeto q ereda de Jtextfield, el show es q cuando voy a hacer las comparaciones de las palabras, y para ser mas exactos que las letras, me salen falso, aun cuando las letras son iguales
Las variables que utilizas en la comparación son c y d

Ambas variables las declaras

Código:
String c,d;
y luego las inicializas

Código:
c = sopaDeLetras[i][j].getText(); 
[...]
d = palabra.charAt(0)+"";
La inicialización es el punto crítico; tienes dos posibilidades, que los String sean iguales o que no. Si ambos String son iguales, entonces javita crea una única instancia para los dos y la comparación te daría true; sin embargo, si estos son diferentes, entonces javita creará una instancia para cada uno de ellos y el resultado de la comparación sería false.

En la comparación te salía false porque c y d tienen como valor la misma letra (razón por la cual en la comparación con el equalsIgnoreCase obtenías true; en otras palabras, entrabas al if); sin embargo, una letra estaba en mayúscula y la otra en minúscula por lo que al compararlo con "==" (este operador diferencia las mayúsculas y minúsculas de un String) javita los consideraba diferentes. El problema, como ya te lo dije, se soluciona si en lugar de "==" utilizas el método equalsIgnoreCase. Debo agregar que en mi primera respuesta te dije que deberías "realizar la comparación con el método equals o equalsIgnoreCase", pero si usas equals obtendrás lo mismo que con "=="; por lo tanto, el único método que debes emplear es equalsIgnoreCase si deseas que al comparar dos String que tengan asignados la misma letra, pero una en mayúscula y la otra en minúscula, te resulte true.

Pretendo explicarme mejor con la ejecución del siguiente código:

Código:
String cad1,cad2;
//Situación 1a
  cad1="S";
  cad2="S";
  System.out.println("De la situación 1a con \"equalsIgnoreCase\": "+cad1.equalsIgnoreCase(cad2));
  System.out.println("De la situación 1a con \"==\": "+(cad1==cad2));
//Situación 1b
  cad1="s";
  cad2="s";
  System.out.println("De la situación 1b con \"equalsIgnoreCase\": "+cad1.equalsIgnoreCase(cad2));
  System.out.println("De la situación 1b con \"==\": "+(cad1==cad2));
//Situación 2a
  cad1="s";
  cad2="S";
  System.out.println("De la situación 2a con \"equalsIgnoreCase\": "+cad1.equalsIgnoreCase(cad2));
  System.out.println("De la situación 2a con \"==\": "+(cad1==cad2));
//Situación 2b
  cad1="S";
  cad2="s";
  System.out.println("De la situación 2b con \"equalsIgnoreCase\": "+cad1.equalsIgnoreCase(cad2));
  System.out.println("De la situación 2b con \"==\": "+(cad1==cad2));
Cita:
el problema ya lo "resolvi", y simplemente lo que hice fue ponerle un atributo extra a la clase Recuadro (que hereda de Jtextfiled), el atributo es de tipo string, y este atributo se inicializara cuando se este leyendo la sopa de letras de un archivo
Al menos que hayas usado los métodos toUpperCase o toLowerCase de la clase String, no imagino cómo con "ponerle un atributo de tipo string que se inicialice cuando se este leyendo la sopa de letras de un archivo" puedas haber corregido lo de la comparación.

Cita:
aun asi.. es algo sumamente extraño
Antes que mencionaras lo de la subclase Recuadro no lo era, te lo aseguro. Sería interesante que pusieras el código respectivo para revisar en qué afecta el atributo que agregaste a la comparación en la que usas "==".

Cita:
a ver sime como puedo postar todo mi codigo con scrollbar, para q lo puedas ver o lo puedan ver
Si quieres escribir código simplemente utiliza la siguiente sintaxis:

[C O D E]
//Cuerpo del código
[/C O D E]

Nota: "C O D E" tiene que estar escrito junto ("CODE")

Última edición por luis10307; 30/12/2010 a las 16:53