为什么我在这段代码中得到无限递归警告,尽管它不是无限的?

时间:2015-11-10 19:57:02

标签: java recursion netbeans

所以我编写了一段应该捕获错误输入格式的代码,并要求用户进行更正。它工作正常,完全按照它应该做的,但Netbeans抛出"方法validate将无限地递归"警告。我对它进行了彻底的测试,并没有真正无限地进行测试,所以我想知道Netbeans可能认为它会发生什么。

编辑:我现在意识到int validatedInput = 0;在这里是罪魁祸首。如果用户输入char,它仍然设置为零并且循环中断。但我的主要观点仍然是为什么Netbeans实际上认为这段代码有可能无限递归,尽管存在阻止它的限制。

以下是以下方法(请注意,maxBound始终由数组长度预定义):

public static int validate(int maxBound) {
    int controlVar = maxBound;
    Scanner scan = new Scanner(System.in);
    boolean wrongInputLoopThrough = false;
    int validatedInput = 0;
    do {
        if (wrongInputLoopThrough) {
            System.out.println("Integer value is out of bound! Please repeat your input.");
        }
        try {
            validatedInput = Integer.parseInt(scan.nextLine());
            wrongInputLoopThrough = true;
        } catch (NumberFormatException e) {
            System.out.println("Not a number, please enter a number");
            validatedInput = validate(controlVar); //here is my recursion to return control flow back to the top of the method
        }
    } while (validatedInput < 0 || validatedInput > controlVar);
    return validatedInput;
}

1 个答案:

答案 0 :(得分:1)

你在catch中再次调用validate,所以如果它无效并且你传递相同的值,它可以无限期地捕获。而不是抓住你应该继续循环,就像它是一个超出边界的整数...