Я думаю, что ваша проблема связана с чтением нежелательной строки, содержащей только новую строку на первой итерации цикла. Я думаю, ваш ввод выглядит примерно так (с пробелом или переводом строки между foo и bar):
foo bar
baz
qux
После первых двух чтений сканер будет расположен сразу после токена bar
, но перед новой строкой, следующей сразу за ним. Вызов nextLine
будет читать остальную часть первой строки (то есть символа новой строки). Он не читает вторую строку, как вы предполагали. Когда вы читаете три строки, вы получаете следующие строки:
"\n"
"baz\n"
"qux\n"
Чтобы решить эту проблему, вы можете либо использовать readLine
вместо read
для чтения первых двух токенов, либо вы можете добавить дополнительный вызов к readLine
непосредственно перед циклом и отбросить все оставшиеся символы из текущего строка, включая символ новой строки.
См. Этот код на ideone , который более четко демонстрирует проблему.