我写了下面的方法,但它不能正常工作。
即使引脚不正确,该程序也会执行主类中的下一个方法。
主要思想是当您的密码正确时,方法将完成并且程序转到下一个方法。如果 PIN 不正确,那么您将有 3 次。如果所有的努力都是错误的,那么这个项目就会失败。因此,您的卡将被卡住。请给我一个和平的建议。
public boolean authenticity(short pin) {
if (pin == 1234) {
System.out.println("PIN is correct");
System.out.println("Card is active for operation!");
return true;
} else {
pin = sc.nextShort();
for (int i = 1; i >= 3; i++) {
System.out.println("PIN isn't correct! You have " +i +"effort(s)");
return authenticity(pin); // recursion
}
}
return false;
}
*在主类中,方法根据命令执行: 真实性(sc.nextShort());
最佳答案
首先,循环的条件应该是 i > 0 :
for (int i = 3; i > 0; i--) {
System.out.println("PIN isn't correct! You have " +i +"effort(s)");
return authenticity(pin);
}
其次,在您当前的实现中,每次递归调用都会为用户提供 3 次额外尝试(至少在 StackOverflow
发生之前)。您应该将剩余尝试次数作为参数传递给递归调用。而且您不需要循环。
public boolean authenticity(short pin, int remainingAttempts) {
if (pin == 1234) {
System.out.println("PIN is correct");
System.out.println("Card is active for operation!");
return true;
} else {
pin = sc.nextShort();
remainingAttempts--;
if (remainingAttempts > 0) {
System.out.println("PIN isn't correct! You have " +remainingAttempts +" attempts left");
return authenticity(pin,remainingAttempts);
}
}
return false;
}
如果你想保留循环,你可以去掉递归。
关于java - 对递归方法和循环感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31003508/