Метод nextLine () моего сканера не работает со всеми входами, как мне это исправить? - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь написать супер простой код, в котором задано целое число, длина этого целого числа (общее количество цифр) распечатывается после ввода в консоль.Мой код успешно печатает все номера, кроме последнего.Я часто сталкиваюсь с этой проблемой и не могу найти решение, которое работает для меня.

Из многих моих исследований, посвященных людям, которые ответили на этот вопрос, я обнаружил, что оно обычно предлагается дляпользователь добавляет оператор nextLine (), чтобы пропустить символ / n в конце каждой строки, однако это не полностью решило проблему для меня, и в конце я все еще получаю ошибку времени выполнения.

    int num = Integer.parseInt(q.next()); // First line of input is # of independent digits that follow, each listed on a line by themselves
    q.nextLine();

    while(num > 0)
    {
        System.out.println(q.next().length());
        q.nextLine();
        num--;
    }

Кажется, в конце я получаю бесконечный цикл, так как программа никогда не останавливается.Приведенный выше фрагмент кода с вводом: 5
200
1
3051

.... распечатывает: 3
1

... в то время как долженбыть 4 напечатанным в конце для числа 3051 цифр.

1 Ответ

0 голосов
/ 31 мая 2019

Хорошо, ваша программа работает, как и ожидалось, но ее можно упростить и отловить неверный ввод.

Scanner s = new Scanner(System.in);
final int numberOfIterations = Integer.parseInt(s.next());
for (int i = 0; i < numberOfIterations; i++) {
    System.out.println(s.next().length());
}
s.close();

Однако это не приведет к ошибке для строки, которая даже не является числом, поэтому этот случай может быть перехвачен:

Scanner s = new Scanner(System.in);
try {
    final int numberOfIterations = Integer.parseInt(s.next());
    for (int i = 0; i < numberOfIterations; i++) {
        final String input = s.next();
        Integer.parseInt(input);
        System.out.println(input.length());
    }
    s.close();
} catch (NumberFormatException e) {
    System.out.println("Bad input!");
}

Существует также математический подход к вычислению количества цифр с использованием оператора по модулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...