Почему пропускается предложения ввода?
В продолжение предыдущего вопроса
Частичная структура программы:
class Mainclass 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:
- Переменной
nameклассаRegionприсваивается значение, которое введет пользовател из клавиатуры (с помощью методаin.nextLine()). - Далее идет проверка, если ничего не введено - вывести сообщение об ошибке.
Но у меня не выходит предложение на ввод из клавиатуры, а сразу выводится сообщения об ошибке, а только потом выходит предложение на ввод. Почему?
А вот если в классе Region создать Scanner, а не передавать его в качестве принимаемого значения аргумента для конструктора класса Region, о всё становится на свои места. Почему?
Вот почему я задал этот вопрос.