混淆了递归方法和循环

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());

Era*_*ran 5

首先,循环的条件应该是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)

如果你想保持循环,你可以摆脱递归.