Как работает валидатор ввода в данном методе?

187
28 июля 2018, 04:10

Пытаюсь понять, как работает данное решение с валидатором (вложенный в 'do' while). Никак не могу понять порядок исполнения кода.

Не понимаю, почему age = s.nextInt(); идет ниже цикла. В каком порядке здесь что выполняется?

void setAge() {
    Scanner s = new Scanner(System.in);
    do {
        while (!s.hasNextInt()) {
            System.out.println("Некорректное значение, попробуйте еще раз: ");
            s.next();
        }
        age = s.nextInt();
        System.out.println("Устанавливается возраст...");
        if (age < 0) {
            System.out.println("Некорректное значение, введите еще раз: ");
        }
        if (age > 150) {
            System.out.println("Слишком большое значение, введите еще раз: ");
        }
    } while (age < 0 || age > 150);
    System.out.println("Вы установили возраст - " + this.age);
}
Answer 1

У вас строка:

age = s.nextInt();

Входит в цикл:

  do {/*тело цикла*/} while (age < 0 || age > 150);

Такой цикл выполняется хотя-бы один раз, затем проверяется условие. Кстати условие: "(age < 0)" - это начиная с нуля. Возраст разве может быть равен нулю? В условии наверное нужно поставить: "(age <= 0)".

READ ALSO
Загрузка файлов в удаленную MongoDB GridFS

Загрузка файлов в удаленную MongoDB GridFS

Нужно записывать метаданные и большие файлы в удаленную MongoDBИзвестен адрес сервера с монгой

141
Как передвинуть маркер в google map Android

Как передвинуть маркер в google map Android

подскажите пожалуйста как передвинуть или удалить маркер в google map Android

201
Ошибка при переключение Tab

Ошибка при переключение Tab

При переключении Tab, выкидывает ошибку:

209
Линии графиков сквозь серии Jfreechart

Линии графиков сквозь серии Jfreechart

Нужно продолжить линии графиков, если в некоторых сериях нет значений

180