Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: tomaco en Mayo 04, 2018, 04:40:59 PM

Título: Resultado if falso cuando deberia ser verdadero
Publicado por: tomaco en Mayo 04, 2018, 04:40:59 PM
Tengo una clase Cerradura con los atributos claveDeApertura y cantidadDeFallosConsecutivosQueLaBloquean y el método abrir() en el cual tengo que verificar si se pasó la clave correcta, si no llegó a la cantidad de fallos consecutivos y si la cerradura no está bloqueada. Por defecto el estado de la cerradura y de bloqueo es false (la cerradura está cerrada y no está bloqueada). Cuando paso una clave correcta, por alguna razón el if me da falso al revisar la clave pasada con la clave del objeto pero cuando hago el debug resulta que el if deberia de ser verdadero porque cumple con todo lo solicitado y recibe bien el dato y lo mas gracioso es que antes funcionaba y de golpe dejó de funcionar jaja. Si pongo una clave incorrecta funciona bien pero me llama la atención eso.

Código (java) [Seleccionar]
public Boolean abrir(Integer clave)
{
if((clave == claveDeApertura) && (cantidadFallos < cantidadDeFallosConsecutivosQueLaBloquean) && (!estadoBloqueo))
{
estadoCerradura = true;
cantidadFallos = 0;
return true;
}

cantidadFallos++;

if(cantidadFallos == cantidadDeFallosConsecutivosQueLaBloquean)
{
estadoBloqueo = true;
estadoCerradura = false;
}

return false;
}


este es el método abrir()
Título: Re:Resultado if falso cuando deberia ser verdadero
Publicado por: sadfud en Mayo 04, 2018, 06:17:12 PM
debuggealo paso a pasa y encontraras el problema
Título: Re:Resultado if falso cuando deberia ser verdadero
Publicado por: tomaco en Mayo 04, 2018, 08:27:58 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
debuggealo paso a pasa y encontraras el problema
es lo que hice (arriba lo dije) y cuando veo los valores que recibe el if, son correctos por lo tanto deberia de entrar. Probando me di cuenta que "el fallo" esta en la primera comparacion, la de la clave atributo y la clave del parametro pero en el debug ambos son iguales por lo que no entiendo porque no entra al if (lo demas del if funciona bien, ya lo comprobe)
Título: Re:Resultado if falso cuando deberia ser verdadero
Publicado por: sadfud en Mayo 06, 2018, 05:06:40 PM
Comparte el codigo completo del proyecto para poder ayudarte.
Título: Re:Resultado if falso cuando deberia ser verdadero
Publicado por: rollth en Mayo 07, 2018, 04:54:46 AM
El problema es que estás comparando dos Strings con "==", esto compara solo si las Referencias son iguales, no si el valor es el mismo. Te pongo un ejemplo.

"test" == "test" te dará verdadero
new String("test") == "test" te dará falso

Para comparar Strings en Java tendrás que usar .equals()

Saludos.
Título: Re:Resultado if falso cuando deberia ser verdadero
Publicado por: salteadorNeo en Mayo 07, 2018, 05:00:00 AM
Buenas...

En java los objetos no se comparan con el == en la clase integer hay un metodo que creo que se llama intvalue que lo devuelve como un int, ya que sino los objetos con == siempre seran distintos..