我有以下代码,我用它来让用户输入一个整数,检查以确保输入有效,如果没有,请再次询问输入。当代码运行时,一切正常,直到给出一些无效的输入,此时代码循环而不会暂停再次请求输入,直到发生堆栈溢出,我不知道为什么。代码:
//Create the scanner object
private static Scanner in = new Scanner(System.in);
//Function to get input in integer form, complete with exception handling
//A value of -1 means the user is done inputing
public static int getInt()
{
int num;
//Begin try block
try
{
//Get the user to input an integer
num = in.nextInt();
//Make sure the integer is positive. Throw an exception otherwise
if (num < -1)
throw new InputMismatchException();
}
//If an exception occurred during the inputting process, recursively call this function
catch (InputMismatchException e)
{
System.out.println("Error: Input must be a positive integer, or -1.");
System.out.print("Enter a score: ");
num = getInt();
}
//Return the inputed number
return num;
}
答案 0 :(得分:3)
当扫描程序抛出InputMismatchException时,扫描程序不会 传递导致异常的令牌,以便可以检索它 或通过其他方法跳过
所以说javadoc,即不是数字的字符串不会自动从输入中删除。手动调用in.next()以丢弃它。
答案 1 :(得分:1)
在再次致电next();
之前,您应致电nextInt();
跳过无效输入。
答案 2 :(得分:0)
函数是否需要递归?这似乎应该很容易用一个简单的循环。
答案 3 :(得分:0)
getInt() - &gt; if(num&lt; -1)抛出异常() - &gt; catch(例外) - &gt; num = getInt()
您希望 NOT 如何循环?