Сканер не обнаруживает пустую строку, а счетчик не точен

Это должна быть очень простая программа, но я новичок в Java. Я хочу иметь возможность вводить несколько строк в консоль, используя сканер для их обнаружения. До сих пор мне удавалось получить правильную часть ввода, я хотел, чтобы программа работала таким образом, чтобы результаты отображались при вводе пустого места, а не строки. Как ни странно, я смог получить результаты только тогда, когда я дважды нажимаю «Ввод», однако, когда есть более 4 входов, нажмите «Возврат», когда работает. Мой счетчик должен подсчитывать количество введенных «Курсов» и отображать их в результатах, но дает неточные показания.

import java.util.Scanner;

public class Saturn
{

    static Scanner userInput = new Scanner(System.in);

    public static void main(String[] args)
    {

        System.out.println("For each course in your schedule, enter its building");
        System.out.println("code [One code per line ending with an empty line]");

        String input;
        int counter = 0;

        while (!(userInput.nextLine()).isEmpty())
        {
            input = userInput.nextLine();
            counter++;
        }


        System.out.println("Your schedule consits of " + counter + " courses");
    }
}

person Marcus    schedule 06.04.2013    source источник
comment
Каждый nextLine() читает новую строку. Он не использует повторно тот, который читается в условии.   -  person chris    schedule 07.04.2013


Ответы (1)


Вы вызываете Scanner#nextLine дважды — один раз в выражении цикла while и еще раз в теле цикла. Вы можете просто назначить input из выражения цикла while. Кроме того, вы можете использовать Scanner#hasNextLine для защиты от NoSuchElementException:

while (userInput.hasNextLine() && 
        !(input = userInput.nextLine()).isEmpty()) {
   System.out.println("Course accepted: " + input);
   counter++;
}
person Reimeus    schedule 06.04.2013
comment
Я вижу, я даже не тестировал этот пограничный случай. Спасибо еще раз - person Marcus; 07.04.2013