0

Есть код

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(); }

Tash
  • 57
  • понятия не имею, что такое этот сканнер, но по логике получается, что эта строка int сount = scan.nextInt(); лишняя. – DrMcSheen Dec 06 '21 at 09:55

1 Answers1

2

Потому что вначале, когда вы вводите integer и нажимаете Enter, input.nextInt() считывает только чило, но не конец строки. Когда input.nextLine() выполняется впервые, он читает конец строки (\n) который все еще не прочитан с прошлого ввода.

Сразу после input.nextInt() вызовите один раз input.nextLine() до цикла, и проблема решится