gpt4 book ai didi

java - 对递归方法和循环感到困惑

转载 作者:搜寻专家 更新时间:2023-11-01 01:42:09 25 4
gpt4 key购买 nike

我写了下面的方法,但它不能正常工作。

即使引脚不正确,该程序也会执行主类中的下一个方法。

主要思想是当您的密码正确时,方法将完成并且程序转到下一个方法。如果 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com