Почему я получаю бесконечный цикл, когда использую Scanner.hasNext() в цикле while?

Я новичок в Java. Я пытаюсь перебрать файл и записать каждую строку в ArrayList. Для этого у меня есть код, который выглядит так:

public static void main(String[]args)throws IOException
{
    File customerData = new File("accountData.txt");
    Scanner fileReader = new Scanner(customerData);
    ArrayList<String> stringArrList = new ArrayList<String>();

    String currentWord = "";
    System.out.println("About to enter while loop");    

    while(fileReader.hasNext());
    {
        currentWord = fileReader.next();
        stringArrList.add(currentWord);
    }
    System.out.println("We have exited the while loop");
}

Однако по какой-то причине этот код застревает в бесконечном цикле. Даже если я поставлю вывод о печати в качестве первой строки в блоке while, он не будет выполняться.

Файл accountData.txt устроен так:

String String String String String
String String String String String
...

Я прочитал все и прочитал, что часто это проблема, потому что люди не используют Scanner.next() для перемещения указателя, но я считаю, что делаю это. Я понятия не имею, что происходит не так.

Спасибо за помощь!


person Jason Smith    schedule 10.04.2016    source источник


Ответы (1)


это проблема, потому что люди не используют Scanner.next() для перемещения указателя, но я считаю, что делаю это

Вы бы использовали Scanner.next(), за исключением того, что ; завершает тело цикла. Убери это. Изменять

while(fileReader.hasNext());
{
    currentWord = fileReader.next();
    stringArrList.add(currentWord);
}

to

while(fileReader.hasNext()) // <-- no semicolon
{
    currentWord = fileReader.next();
    stringArrList.add(currentWord);
}
person Elliott Frisch    schedule 10.04.2016
comment
Пожалуйста, просто проголосуйте, чтобы закрыть как опечатку, или выберите один из сотен дубликатов. - person Savior; 11.04.2016