После того, как вы позвоните hasNext()
, в первый раз, если вы не прочитаете файл, hasNext()
всегда вернет true. Потому что передняя часть ввода не меняется.
Представьте, что у вас есть файл с этой строкой:
это ввод
Если вы позвоните hasNext()
для этого файла, он вернет true
, поскольку в файле есть следующий токен, в данном случае слово this
.
Если вы не читаете из файла после этого начального вызова, то «следующий» ввод, который нужно обработать, ЕЩЕ остается словом this
. Следующий ввод не изменится, пока вы не прочитаете из файла.
TL; DR
Когда вы вызываете hasNext()
чтение из файла, в противном случае вы всегда будете иметь бесконечный цикл.
Дополнительно
Если вы действительно хотите использовать hasNext()
или хотели бы, вы можете создать еще один объект Scanner
и прочитать файл, чтобы посчитать строки, тогда ваш цикл будет работать нормально. Кроме того, вы должны действительно использовать hasNextLine()
public int countLines(File inFile)
{
int count = 0;
Scanner fileScanner = new Scanner(inFile);
while(fileScanner.hasNextLine()) //if you are trying to count lines
{ //you should use hasNextLine()
fileScanner.nextLine() //advance the inputstream
count++;
}
return count;
}
Надеюсь, это полезно.