为什么这种获取用户输入的方法不起作用?

时间:2010-11-15 19:05:17

标签: java exception recursion input java.util.scanner

我有以下代码,我用它来让用户输入一个整数,检查以确保输入有效,如果没有,请再次询问输入。当代码运行时,一切正常,直到给出一些无效的输入,此时代码循环而不会暂停再次请求输入,直到发生堆栈溢出,我不知道为什么。代码:

//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;
}

4 个答案:

答案 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 如何循环?