Почему этот метод получения пользовательского ввода не работает? - PullRequest
0 голосов
/ 15 ноября 2010

У меня есть следующий код, который я использую, чтобы заставить пользователя ввести целое число, проверить, чтобы убедиться, что ввод действителен, и если нет, запросить ввод еще раз. Когда код запускается, все работает нормально, пока не будет введен какой-то неверный ввод, после чего код зацикливается, не останавливаясь, чтобы снова запросить ввод, пока не произойдет переполнение стека, и я понятия не имею, почему. Код:

//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 ]

3 голосов
/ 15 ноября 2010

Когда сканер генерирует исключение InputMismatchException, сканер не пропустит токен, вызвавший исключение, так что он может быть получен или пропущен с помощью другого метода

Так говорит Javadocстрока, которая не является числом, не удаляется из ввода автоматически.Вызовите in.next () вручную, чтобы удалить его.

1 голос
/ 15 ноября 2010

Вы должны позвонить next();, чтобы пропустить неверный ввод перед повторным вызовом nextInt();.

0 голосов
/ 15 ноября 2010

getInt () -> if (num <-1) throw Exception () -> catch (exception) -> num = getInt ()

как вы ожидаете NOT допетля?

0 голосов
/ 15 ноября 2010

Необходимо ли, чтобы функция была рекурсивной? Похоже, это должно быть достаточно легко сделать с помощью простого цикла.

...