Почему пропускается предложения ввода?

В продолжение предыдущего вопроса

Частичная структура программы:

  • class Main
  • class State - область
  • class Region - районы, которые входят в область

Класс Main:

public class Main {

    public static void main(String[] args) {
        State state = new State(); // создаем объект класса State
        Scanner scanner = new Scanner(System.in); // для считывания введенных пользователем названий для районов

        state.addRegion(scanner); // вызываем метод `addRegion` класса State, который принимает одно значение - это поток ввода-вывода
    }
}

Класс State:

public class State {
    private ArrayList<Region>   regionArrayList = new ArrayList<>(); // для хранения ссылок на объекты класса `Region`

    // тут уже создается объект класса Region через конструктор, который принимает поток ввода-вывода, который мы передали выше
    public void addRegion(Scanner in){
        regionArrayList.add(new Region(in));
    }
}

Класс Region:

public class Region{

    private String              name;       // название области

    // конструктор, который принимает тот самый Scanner
    Region(Scanner in){
    while (true){
        this.name = in.nextLine();
        if (this.name.trim().length() != 0) return;
        System.out.print("\n[ОШИБКА] Название области не может быть пустым полем.\n" +
                "Повторите ввод: ");
        }
    }
}

Разбираем код, который находится в цикле while:

  1. Переменной name класса Region присваивается значение, которое введет пользовател из клавиатуры (с помощью метода in.nextLine()).
  2. Далее идет проверка, если ничего не введено - вывести сообщение об ошибке.

Но у меня не выходит предложение на ввод из клавиатуры, а сразу выводится сообщения об ошибке, а только потом выходит предложение на ввод. Почему?

А вот если в классе Region создать Scanner, а не передавать его в качестве принимаемого значения аргумента для конструктора класса Region, о всё становится на свои места. Почему?

Вот почему я задал этот вопрос.


Ответы (0 шт):