Foros del Web » Programación para mayores de 30 ;) » Java »

Extraño Suceso en Java

Estas en el tema de Extraño Suceso en Java en el foro de Java en Foros del Web. Hola amigos, estoy aki para preguntarles algo...resulta q tengo un programa q encierra en un String el contenido de un JtextField, pero cuado lo va ...
  #1 (permalink)  
Antiguo 06/06/2010, 02:45
 
Fecha de Ingreso: junio-2010
Mensajes: 132
Antigüedad: 13 años, 10 meses
Puntos: 3
Extraño Suceso en Java

Hola amigos, estoy aki para preguntarles algo...resulta q tengo un programa q encierra en un String el contenido de un JtextField, pero cuado lo va a comparar con otros string (iguales) resulta que da falso;



Código PHP:
public void BuscarPalabra(String palabra)
   {
        
//pasar tota la palabra a mayuscula
        
        //char a,b;
        
String c,d;
        
System.out.println(palabra.charAt(0));
        for(
int i=0;i<interfazDeUsuario.getFilas();i++)
            for(
int j=0;j<interfazDeUsuario.getColumnas();j++)
            {
                
sopaDeLetras[i][j].getText();
                
System.out.print(c.charAt());
                
                
palabra.charAt(0)+"";
                
//System.out.println(d);
                
if(d.equalsIgnoreCase(c))
                  
System.out.println(+" "+(c==d));
                
/*if(a.equalsIgnoreCase(b))
                {
                    System.out.println("Entro");
                    buscarEnSopadeLetras(palabra,i,j);
                }*/
            
}
   } 
No entiendo porke no devuelven true las funciones de comprar
  #2 (permalink)  
Antiguo 06/06/2010, 04:49
 
Fecha de Ingreso: junio-2010
Ubicación: Antofagasta
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Mensaje Respuesta: Extraño Suceso en Java

Cita:
Iniciado por deitynitros98 Ver Mensaje
Hola amigos, estoy aki para preguntarles algo...resulta q tengo un programa q encierra en un String el contenido de un JtextField, pero cuado lo va a comparar con otros string (iguales) resulta que da falso;
deitynitros98, no se trata de un "extraño suceso" de javita, así que aunque reinicies tu IDE las veces que quieras jamás te saldrá true (suponiendo que lo hayas intentado)

En la línea

Cita:
Código PHP:
System.out.println(+" "+(c==d)); 
debes realizar la comparación con el método equals o equalsIgnoreCase porque el operador relacional "==" compara las instancias de las cadenas. Puesto que las variables c y d tienen asignados valores distintos, javita crea una instancia diferente para cada variable; por esa razón, el resultado es false

Lo correcto es

Código:
System.out.println(c +" "+ d +(c.equalsIgnoreCase(d)));
Puedes ver la documentación de javita en http://java.sun.com/javase/6/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String) para revisar los métodos de la clase String

Espero haberte ayudado.

Saludos.

Luis V

Última edición por luis10307; 09/06/2010 a las 12:52 Razón: Sigo sin poder enlazar al URL
  #3 (permalink)  
Antiguo 06/06/2010, 07:29
 
Fecha de Ingreso: junio-2010
Mensajes: 132
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: Extraño Suceso en Java

Jaja oye gracias, pero la verdad no me ayudaste en nada...jajajaja, 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, 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....aun asi.. es algo sumamente extraño....a ver sime como puedo postar todo mi codigo con scrollbar, para q lo puedas ver o lo puedan ver, el programa actualmente se ejecuta bien y estoy usando el jcreator...Saludos hermano
  #4 (permalink)  
Antiguo 07/06/2010, 00:03
 
Fecha de Ingreso: junio-2010
Ubicación: Antofagasta
Mensajes: 5
Antigüedad: 13 años, 10 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

Etiquetas: extraño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:08.