所以我写了一段代码,它应该捕捉错误的输入格式,并要求用户进行更正。它工作正常,做了它应该做的事情,但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,因此,如果它无效并且您正在传递相同的值,它可能会无限期地捕获。与其捕获,不如继续循环,就像它是一个超出界限的整数一样。。。