Java - Ayuda por favor!

   
Vista:

Ayuda por favor!

Publicado por nacional100 (2 intervenciones) el 13/11/2015 15:53:16
Es que es increible, he estado una hora intentando que el siguiente código funcione pero no lo hace... De verdad debe ser un error muy estúpido, pero no me doy cuenta.-

http://puu.sh/lk1tY/57d8907b81.png

Los atributos pY y pX siguen siendo cero, el operador (a == "@") nunca es verdadero. ¿Por qué????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda por favor!

Publicado por Thanatos (69 intervenciones) el 13/11/2015 18:21:05
Cuando utilizas el operador == para comparar cadenas (String), estás comparando sus referencias (posiciones de memoria); y no los valores que contienen esas posiciones de memoria (que es lo que necesitas hacer en tu programa).

Para comparar los valores necesitas utilizar el método equals().

La condición que necesitas evaluar en la sentencia if, quedaría de esta manera:

1
if ("@".equals(a))

También podría escribirse de esta manera:

1
if (a.equals("@"))

Pero, en este caso, es preferible la primera forma, porque "@" es un literal y por lo tanto no existe la posibilidad de que tome el valor null durante la ejecución de tu programa. En cambio, en la segunda forma, si por algún motivo se llega a la situación en que a = null, tu programa ocasionaría una excepcion NullPointerException al hacer la comparación.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda por favor!

Publicado por Xampy (14 intervenciones) el 17/11/2015 10:37:34
De cualquiera de las 2 formas puede ocasionar un nullpointer.
Debe de controlarlo al implementar el metodo equals.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda por favor!

Publicado por Thanatos (69 intervenciones) el 18/11/2015 04:19:39
Tienes razón Xampy, lo mejor sería controlar esa excepción. En especial para luego localizar la parte del código donde la variable llega a hacer referencia a null.

No obstante, en este caso, la primera forma de uso del método equals() no ocasiona que se lance la excepción:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Clase {
 
    public static void main(String[] args) {
        String a = null;
 
        verificar_1(a);
       // verificar_2(a);   // NullPointerException
    }
 
    private static void verificar_1(String dato) {
        if ("@".equals(dato)) {
            System.out.println("son iguales");
        } else {
            System.out.println("no son iguales");
        }
    }
 
    private static void verificar_2(String dato) {
        if (dato.equals("@")) {
            System.out.println("son iguales");
        } else {
            System.out.println("no son iguales");
        }
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar