所以我编写了一段应该捕获错误输入格式的代码,并要求用户进行更正。它工作正常,完全按照它应该做的,但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;
}
答案 0 :(得分:1)
你在catch中再次调用validate,所以如果它无效并且你传递相同的值,它可以无限期地捕获。而不是抓住你应该继续循环,就像它是一个超出边界的整数...