hasNext() говорит вам, есть ли еще элементы для чтения из потока.В этом случае вызов будет блокироваться до тех пор, пока не будет введен пользовательский ввод.
Есть три сценария:
Пользователь не обеспечивает вход на все. Вызов будет блокироваться бесконечно.
Пользователь предоставляет некоторые данные, которые не являются EOF. Возвращаемое значение будет true.
Пользовательские входы EOF. Возвращаемое значение будет ложным.
В контексте вашей программы, это означает, что в то время как контур будет выполняться до тех пор, пока пользователь не дает EOF (Ctrl + D или Ctrl + Z). Если пользователь знает об этом, я полагаю, все будет хорошо.
Но поведение, безусловно, может быть более удобным: например, в настоящее время он просит пользователя ввести номер. Но hasNext() не имеет значения, является ли ввод числом или нет, цикл будет продолжаться вечно до тех пор, пока вход не будет EOF.
Другая проблема может возникнуть, если пользователь попытается предоставить некоторый предопределенный ввод через командную строку, если вход не был специально завершен с помощью EOF, программа будет блокироваться навсегда. В заявлении нет означает, что программа перестанет работать, когда больше нет ввода для чтения (если не указано EOF, конечно).
Какая часть [Javadoc] (http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNext()) неясна для вас? –
Условие внутри оператора 'while' выполняется в начале первой итерации и в начале каждой последующей итерации замкнутого цикла. – Kon
Обратите внимание, что 'hasNext' возвращает true, если остался какой-либо вход без пробелов, даже если он не является числом. Таким образом, возможно, что 'nextInt' может вызвать исключение. 'Scanner' также имеет метод' hasNextInt', чтобы увидеть, есть ли еще один токен, и он выглядит как целое число. Вы можете использовать оба варианта, т. Е. Сначала использовать 'hasNext()', чтобы увидеть, есть ли какой-либо вход, а затем 'hasNextInt()', чтобы убедиться, что это действительное целое число. – ajb