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

标签 java for-loop recursion methods

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

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

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

相关文章:

使用 Spring 和 Hibernate 的 java.lang.NoSuchMethodError : antlr. collections.AST.getLine()

java - 使用 Retrofit 获取原始 HTTP 响应

javascript - for/in 循环在 Javascript 中如何工作?代码学院练习

Python 奇怪的返回问题

javascript - 回调如何在使用 Javascript 的递归调用中工作?

java - 用于查找数组中最大数字的递归算法的运行时间复杂度是多少。将其与迭代循环代码进行比较

java - 我需要一种方法来随机化通过和类的结果

java - 在 hibernate-core-4.3.0.Beta5.jar 中获取 SessionFactory

c - main 外部的函数未从 For 循环返回正确的值

r - 带for循环的数据汇总