Java scanner.nextLine() в цикле for пропускает нулевую итерацию
Есть код
Scanner scan = new Scanner(System.in);
int сount = scan.nextInt();
for (i=0; i<сount; i++)
{
System.out.println(i);
name = scan.nextLine();
}
Получаем:
// ждет ввод с консоли
3
//Запуск цикла
i=0
i=1
// ждет ввод с консоли
text
i=2
// ждет ввод с консоли
text2
При запуске ожидает число count, получает его и проходит в цикле count итераций, ожидая при каждой итерации ввод строки. НО! При нулевом проходе цикла когда i=0 оно не ожидает никакого ввода и сразу перепрыгивает на i=1, и тогда уже ждет ввода. Если создать новый объект Scanner scan1 непосредственно перед циклом и обращаться к нему, тогда даже при нулевой итерации цикла оно ожидает ввод строки, как и положено. Почему тогда при использовании одного и того же объекта scan для ввода числа и строк оно перескакивает нулевую итерацию в цикле?
// вот так работает корректно
Scanner scan = new Scanner(System.in);
int сount = scan.nextInt();
Scanner scan1 = new Scanner(System.in);
for (i=0; i<сount; i++)
{
System.out.println(i);
name = scan1.nextLine();
}
Ответы (1 шт):
Потому что вначале, когда вы вводите integer и нажимаете Enter, input.nextInt() считывает только чило, но не конец строки. Когда input.nextLine() выполняется впервые, он читает конец строки (\n) который все еще не прочитан с прошлого ввода.
Сразу после input.nextInt() вызовите один раз input.nextLine() до цикла, и проблема решится