Resultado if falso cuando deberia ser verdadero

  • 5 Respuestas
  • 1969 Vistas

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

Desconectado tomaco

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

Resultado if falso cuando deberia ser verdadero

  • 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()
« Última modificación: Mayo 04, 2018, 07:35:32 pm por Gabriela »

Desconectado sadfud

  • *
  • Moderador
  • Mensajes: 209
  • Actividad:
    0%
  • Country: cl
  • Reputación 10
  • Skype: SadFud75
    • Ver Perfil
    • Blog
debuggealo paso a pasa y encontraras el problema
Si necesitas ayuda, no dudes en mandar MP

Desconectado tomaco

  • *
  • Underc0der
  • Mensajes: 27
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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)

Desconectado sadfud

  • *
  • Moderador
  • Mensajes: 209
  • Actividad:
    0%
  • Country: cl
  • Reputación 10
  • Skype: SadFud75
    • Ver Perfil
    • Blog
Comparte el codigo completo del proyecto para poder ayudarte.
Si necesitas ayuda, no dudes en mandar MP

Desconectado rollth

  • *
  • Ex-Staff
  • *****
  • Mensajes: 881
  • Actividad:
    20%
  • Reputación 16
  • El conocimiento es libre.
  • Twitter: @RoloMijan
    • Ver Perfil
    • Whateversec
    • Email
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.

Desconectado salteadorNeo

  • *
  • Underc0der
  • Mensajes: 7
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
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..