Класс сканера имеет бесконечный цикл hasNextLine - PullRequest
3 голосов
/ 02 ноября 2011

почему этот кусок кода заходит в бесконечный цикл, когда я пытаюсь дать ему базовый текстовый файл?

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
public class TestFile
{

    public static void main(String args[]) throws IOException
    {
            // Read in input file                                                                                                                                            
            File input = new File(args[0]);
            Scanner freader = new Scanner(input);
            while (freader.hasNextLine()) {
                System.out.println("hi");
            }

            freader.close();

    }

}

Строка печати просто продолжает идти.

Ответы [ 3 ]

11 голосов
/ 02 ноября 2011

Поскольку hasNexLine() не получает линию и не изменяет состояние сканера. если это правда один раз, и никакие другие методы сканера не вызываются, это всегда будет правда.

9 голосов
/ 02 ноября 2011

Потому что вы должны использовать nextLine, поэтому код должен быть:

while ( theScanner.hasNextLine() ) {
    String theLine = theScanner.nextLine();
}

Если вы не вызываете nextLine(), вы всегда будете наблюдать за одной и той же строкой, и она всегда ответит правдиво.

4 голосов
/ 02 ноября 2011

Добавьте вызов к nextLine или любому другому методу Scanner, который будет читать некоторые входные данные внутри цикла while.

В данный момент вы просто повторно вызываете hasNextLine (который только возвращает boolean, он не изменяет поток) без извлечения какого-либо ввода из freader, поэтому, если freader изначально имеет другую строку внутри своего ввода hasNextLine всегда вернет истину, и ваш цикл по сути будет while (true).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...