Проверьте, является ли ввод int перед добавлением в список - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь разделить введенное число на его цифры, добавив каждую цифру в список целых чисел.Мне нужно ввести нецелое число, чтобы сканер не искал больше целых чисел.Однако при вводе нецелого числа я всегда получаю эту ошибку:

Exception in thread "main" java.util.InputMismatchException

Я знаю, что это происходит из-за того, что я ожидаю int, но получаю другой тип ввода, но я нене знаю, почему это происходит.Разве if(inputtedText.hasNextInt()) не должен препятствовать этому?

List<Integer> digits = new ArrayList<Integer>();

Scanner inputtedText = new Scanner(System.in);

String stringOfInputtedNumber = "";
while(true) {
    if(inputtedText.hasNextInt()) {
        stringOfInputtedNumber += inputtedText.nextInt();
//      digits.add(inputtedText.nextInt());
    } else {
        break;
    }
}

Редактировать: Извините, я забыл указать, что закомментированная строка является той, которая вызывает проблему.

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Попробуйте сохранить файл, перекомпилируйте его и попробуйте запустить его снова. Я попробовал ваш код на моей машине, и он работает так, как ожидалось Нет исключений inputMismatch и нет необходимости в блоке try

0 голосов
/ 25 августа 2018

Да, hasNextInt() может это исправить, но вы также должны помнить о закрытии классов ввода-вывода, таких как Scanner.

    List<Integer> digits = new ArrayList<Integer>();
    try (Scanner inputtedText = new Scanner("123123123A")) {
        String stringOfInputtedNumber = "";
        while (true) {
            if (inputtedText.hasNextInt()) {
                stringOfInputtedNumber += inputtedText.nextInt();
            } else {
                break;
            }
        }
    } 
    System.out.println(stringOfInputtedNumber);

Это можно сделать с помощью try-with-resources

...