Ключевой момент: выражение if может быть внутри другого выражения if для формирования вложенных инструкций if.
Вложенная инструкция if
Инструкциями в выражении if или if-else могут быть любые правильные с точки зрения Java выражения, включая другие инструкции if или if-else. Внутреннюю инструкцию if называют вложенной внутрь внешней инструкции if. Внутренняя инструкция if может содержать другую инструкцию if; в действительности, нет никаких ограничений на глубину вложенности. Пример вложенной инструкции if:
if (i > k) { if (j > k) System.out.println("i и j больше k"); } else System.out.println("i меньше или равна k");
Инструкция if (j > k) является вложенной внутри инструкции if (i > k).
Вложенные инструкции if могут использоваться для реализации нескольких альтернатив. На рисунке (a), например, показан код с множественными альтернативами, печатающий букву оценки в зависимости от набранных балов.
Выполнение этой инструкции if обрабатывается как показано на следующей картинке:
Начинается с тестирования первого условия (score >= 90.0). Если оно true, то оценка A. Если оно false, то тестируется (score >= 80.0). Если второе выражение true, то оценка B. Если это условие false, то тестируется третье и последующие условия (если необходимо) до тех пор, пока не встретиться подходящее условие или пока не будет подтверждено, что все условия false. Если все условия false, то оценкой является F. Обратите внимание, что условие тестируется только если все предыдущие условия являются false.
Инструкция if (a) на предыдущем рисунке является эквивалентом инструкции if на том же рисунке (b). В действительности для множественных альтернатив инструкций if, предпочтительной является стиль кода на рисунке (b). Этот стиль называется многовариантные инструкции if-else, избегайте слишком сильного смещения вправо и делайте программу простой для чтения.
Проверь себя:
- Допустим x = 3 и y = 2; покажите вывод, если он будет, следующего кода. Что будет выведено если x = 3 и y = 4? Что будет выведено если x = 2 и y = 2? Начертите блок-схему кода.
if (x > 2) { if (y > 2) { z = x + y; System.out.println("z is " + z); } } else System.out.println("x is " + x);
- Допустим x = 2 и y = 3. Покажите вывод, если он будет, следующего кода. Что будет выведено если x = 3 и y = 2? Что будет выведено если x = 3 и y = 3?
if (x > 2) if (y > 2) { int z = x + y; System.out.println("z is " + z); } else System.out.println("x is " + x);
- Что не так со следующим кодом?
if (score >= 60.0) System.out.println("D"); else if (score >= 70.0) System.out.println("C"); else if (score >= 80.0) System.out.println("B"); else if (score >= 90.0) System.out.println("A"); else System.out.println("F");