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



所以我写了一段代码,它应该捕捉错误的输入格式,并要求用户进行更正。它工作正常,做了它应该做的事情,但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;
}

您在捕获中再次调用validate,因此,如果它无效并且您正在传递相同的值,它可能会无限期地捕获。与其捕获,不如继续循环,就像它是一个超出界限的整数一样。。。

相关内容

  • 没有找到相关文章

最新更新