递归逻辑读取输入

Recursion logic reading input

您好,我在理解为什么我的递归逻辑 return 输入第一个输入时遇到了一些问题,即使它似乎没有通过验证检查。 Java中的一个简单示例:

public class Main {

  public static void main(String[] args) {
    System.out.println(getInput(new Scanner(System.in)));
  }

  static private int getInput(Scanner scanner) { ;
    System.out.println("Give me input: ");
    int in = scanner.nextInt();
    if (in < 1 || in > 9) {
      getInput(scanner);
    }
    return in;
  }

}

我的理解是函数应该调用自身直到满足条件 return 0 到 9 之间的数字。条件检查似乎有效但无论输入第一个数字总是 return编辑。示例执行结果:

Give me input: 
111
Give me input: 
222
Give me input: 
333
Give me input: 
444
Give me input: 
1
111

递归时,不会存储该调用的结果:

 getInput(scanner);

应该是:

 in = getInput(scanner);

您可能还想重新考虑在此类用例中使用递归的必要性。 要不断要求用户提供有效输入,递归是多余的。

想想用例,当你想限制用户滥用系统、连续输入无效的情况时,你会想对尝试次数设置上限。

迭代解决方案更易于理解、实施和维护。