Ale*_*kov 4 java methods recursion for-loop
我写了下面的方法,但它无法正常工作.
即使引脚不正确,该程序也会在Main类中执行下一个方法.
主要的想法是当你的引脚正确时,方法将完成,程序转到下一个方法.如果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;
}
Run Code Online (Sandbox Code Playgroud)
*在Main类中,该方法根据以下命令执行:authenticity(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);
}
Run Code Online (Sandbox Code Playgroud)
其次,在您当前的实现中,每次递归调用都会给用户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;
}
Run Code Online (Sandbox Code Playgroud)
如果你想保持循环,你可以摆脱递归.