Вложенные условные операторы  

Вложенные условные операторы

Ветвление в программе. Вложенные условные операторы. Оператор множественного выбора

Вложенные условные операторы

Когда требуется последовательно перепроверять несколько взаимоисключающих условий, для частей else не открывают отдельного блока (записывают следующий if как простую, а не как составную инструкцию), чтобы получить более компактную запись. Такие конструкции в коде называют else…if.

Рассмотрим сначала вариант записи со вложенными блоками. Для примера рассмотрим следующую задачу.

Мужчина заполняет в военкомате анкету и программа должна в зависимости от указанного им возраста выводить разные подсказки, а именно:

1. Если указан возраст от 18 и до 27 лет, то сообщать, что заполняющий подлежит призыву на срочную службу или может служить по контракту.

2. Если указан возраст от 28 до 59 лет, то сообщать, что заполняющий может служить по контракту.

3. Если указан возраст менее 18 или более 59 лет, то сообщать о том, что заполняющий находится в непризывном возрасте.

4. Если указан неположительный возраст или возраст более 100 лет, то сообщить об ошибке.

Предположим, что возраст сохранён в переменной n, тогда для вывода подсказки потребуется следующий код:

if (n>=18 && n<27) {
System.out.println("Вы можете пройти срочную или контрактную службу");
} else {
if (n>=27 && n<60) {
System.out.println("Вы можете служить только по контракту");
} else {
if (n>0 && n<=100) {
System.out.println("Вы находитесь в непризывном возрасте");
} else {
System.out.println("Скорее всего, вы допустили ошибку и неверно указали возраст");
}
}
}

Обратите внимание на то, что как только одно из условий окажется истинным — все последующие проверки не будут выполняться (т.е. в лучшем случае выполниться только первая проверка). Соответственно, сообщение об ошибке будет выведено тогда и только тогда, когда все проверяемые условия дадут ложный результат.

Более того, для сообщения о непризывном возрасте условие подобрано с учётом того, что заполняющий анкету уже не подошёл ни к одному из вариантов призывного возраста. Конечно, можно было бы использовать вот такое условие:

n>0 && n=60 && n<=100

Но оно было бы избыточным, ведь ранее (за счёт выше стоящих проверок) мы уже убедились, что переменная n не попала в промежуток [18;60). Если бы переменная попадала в промежуток, то вывелось бы сообщение «Вы можете пройти срочную или контрактную службу» или «Вы можете служить только по контракту».

Но для случая, когда проверяется последовательность условий можно (но не необходимо) использовать более компактную запись, где содержание каждого else кроме последнего не оформляется в виде отдельного блока. Тот же фрагмент кода с учётом этой возможности может записываться так:



if (n>=18 && n<27) {
System.out.println("Вы можете пройти срочную или контрактнуню службу");
} else if (n>=27 && n<60) {
System.out.println("Вы можете служить только по контракту");
} else if (n>0 && n<=100) {
System.out.println("Вы находитесь в непризывном возрасте");
} else {
System.out.println("Скорее всего, вы допустили ошибку и неверно указали возраст");
}


8693258257701298.html
8693323233251674.html

8693258257701298.html
8693323233251674.html
    PR.RU™