Метод hasNext()
работает следующим образом:
- Если он видит конец файла, он возвращает ложь;
- Если он видит другой действительный вход без пробелов, он возвращает true;
- Если ни одно из указанных выше не верно, оно ожидает следующего ввода, который пользователь будет вводить, и не возвращается до тех пор, пока он не сделает.
Обычно, если вы используете Scanner
для файлов, такой цикл будет работать правильно, потому что файл имеет определенный конец, и это, как правило, не застревает в ожидании дополнительного ввода.
Но когда вы работаете с консольным вводом (, не перенаправляется), тогда обычно пользователь не отправляет сигнал конца файла. Он просто нажимает Возвращает, и так, hasNext()
сидит и ждет, будет ли пользователь вводить больше ввода на следующей строке и так далее.
Есть два основных способа решения этой:
Пользователь должен фактически прекратить ввод. После завершения ввода всех цифр и нажмите Return, также необходимо отправить символ конца файла последовательности, которая обычно CtrlD или CtrlZ.
Если вы сделаете это, вы не сможете вводить никаких дополнительных данных для этой программы.
Программа сообщает пользователю ввести определенное значение, которое сообщит, что входной сигнал завершен. Например, строка «DONE». Когда вы сделаете это, вы должны изменить цикл, чтобы что-то вроде:
String nextInput;
while(sc.hasNext() && ! (nextInput = sc.next()).equals("DONE")){
System.out.println(nextInput);
}
Вы нажимая клавишу ВВОД после ввода этого? – FlyingPiMonster
да я .. это распечатать sc.next(), но затем просто останавливается и не выходит из цикла while для печати. Тест –
Вы не выйдете из этого цикла, не используя определенное слово «завершения». 'System.in' всегда запрашивает больше ввода, поэтому' sc.hasNext() 'всегда истинно. – Tom