Иногда одной проверки недостаточно, и логика программы требует уточнения условий. В таких случаях используются вложенные условия if. Это конструкция, когда один оператор if находится внутри блока другого.
Представьте систему авторизации: сначала мы проверяем, существует ли пользователь, и только если это так (истина), проверяем правильность пароля. Визуально код смещается вправо, образуя «лесенку».
Эти задания направлены на отработку сложной логики. Вы научитесь комбинировать проверки, понимать порядок их выполнения и избегать ошибок в структуре кода. Интерактивный формат поможет разобраться, как программа проходит через несколько уровней проверок.
- Модуль 1: Первая программа и структура
- Модуль 2: Переменные и типы данных
- Объявление и инициализация переменных.
- Примитивы: целые числа (int, long, byte, short).
- Примитивы: дробные числа (double, float).
- Примитивы: логический тип (boolean).
- Примитивы: символьный тип (char).
- String — основы работы со строками.
- Приведение типов (Casting): расширение и сужение.
- Область видимости переменных (Scope).
- Модуль 3: Операторы
- Модуль 4: Управляющие конструкции
- Модуль 5: Массивы и Строки (Advanced)
- Создание и заполнение массива.
- Доступ к элементам по индексу.
- Свойство length и перебор массива.
- Цикл for-each для массивов.
- Многомерные массивы.
- Методы String: length, charAt, isEmpty.
- Манипуляции: substring, concat, replace.
- Сравнение строк: equals vs ==.
- Разделение строк (split) и trim.
- StringBuilder (изменяемые строки).
- Модуль 6: Методы
- Модуль 7: Классы и Объекты (ООП Часть 1)
- Модуль 8: Капсуляция и Модификаторы
- Модуль 9: Наследование и Полиморфизм (ООП Часть 2)
- Модуль 10: Обработка исключений
- Модуль 11: Коллекции и Дженерики
- Модуль 12: Функциональный стиль (Java 8+)
- Модуль 13: Полезные стандарты
1. Найти вложенное условие
Перед вами фрагмент кода на Java с несколькими условными операторами. Ваша задача — найти и выделить оператор if, который находится внутри тела другого if, то есть является вложенным условием. Не выделяйте внешние условия верхнего уровня, даже если они тоже используют оператор if.
boolean loggedIn = user != null;
boolean isAdmin = loggedIn && user.isAdmin();
{{if (loggedIn) {~|~t1}}
{{if (isAdmin) {~|~t2}}
System.out.println("Admin panel");
}
}
{{if (cartTotal > 1000) {~|~t3}}
System.out.println("Discount applied");
}
2. Результат вложенной проверки
Проанализируйте приведенный код на Java с вложенными условными конструкциями if-else. Учитывая заданные значения переменных, определите, какое сообщение будет выведено в результате выполнения программы. Обратите внимание на порядок проверки условий и область видимости переменных.
public class Main {
public static void main(String[] args) {
int temperature = 25;
boolean isSunny = false;
boolean hasUmbrella = true;
if (temperature > 20) {
if (isSunny) {
System.out.println("Идем гулять без зонта");
} else {
if (hasUmbrella) {
System.out.println("Берем зонт на прогулку");
} else {
System.out.println("Остаемся дома");
}
}
} else {
System.out.println("Слишком холодно для прогулки");
}
}
}3. Сборка матрешки
Из предложенных строк соберите корректную Java-программу, которая демонстрирует работу вложенных условий if, как матрешка: внешняя проверка (наличие билета) содержит внутреннюю проверку (возраст). Программа должна выводить "Вход разрешен", если билет есть и возраст 18 или больше, "Требуется сопровождение", если билет есть и возраст меньше 18, и "Билет не найден", если билета нет. Одна из строк является лишней и не должна входить в решение.
public class Main { public static void main(String[] args) { boolean hasTicket = true; int age = 25; if (hasTicket) { if (age >= 18) System.out.println("Вход разрешен"); else System.out.println("Требуется сопровождение"); } else System.out.println("Билет не найден"); }} System.out.println("Проверка завершена");4. Дописываем логику
Допишите условия во внешнем и внутреннем операторе if так, чтобы код корректно проверял возраст и выдавал скидку только подходящему посетителю. Во внешнем if нужно проверить, что посетитель достиг 18 лет, а во внутреннем — что он одновременно является студентом и имеет билет. Заполните пропуски булевыми выражениями, не изменяя остальной код.
int age = 20;
boolean hasTicket = true, isStudent = true;
// Сначала проверяем, что посетитель достиг 18 лет (используйте оператор >=)
if (input1S) {
System.out.println("Вход разрешён");
// Скидка только студенту с билетом (оба условия должны быть true)
if (input2S) {
System.out.println("Вы получаете скидку!");
}
} else {
System.out.println("Вход запрещён");
}5. Ошибка в логике
В этом фрагменте кода допущена ошибка в логике вложенных условий. Вложенный блок else относится не к тому if, к которому должен по смыслу задачи из-за неправильной расстановки фигурных скобок. Исправьте две строки кода: добавьте открывающую скобку после внешнего if и закройте блок внутреннего if перед else.
public class Main { public static void main(String[] args) { int age = 16; boolean hasTicket = true; if (age >= 18) if (hasTicket) System.out.println("Добро пожаловать в кино!"); else System.out.println("Вы слишком молоды для этого фильма."); }}6. Счетчик внутри условий
Рассмотрите фрагмент Java-кода с вложенными условиями if, в котором переменная score изменяется по мере прохождения проверок. Проследите выполнение программы построчно: как меняется значение score в зависимости от значений переменных и выполненных веток if/else. Введите в поле одно целое число — итоговое значение score, которое будет выведено на экран.
public class Main {
public static void main(String[] args) {
int score = 3, time = 7;
if (time < 10) {
score += 5;
if (time < 5) score *= 2;
else score -= 1;
} else score--;
System.out.println(score);
}}
7. Выбор структуры
Дополните фрагмент Java-кода с вложенными условиями так, чтобы структура if/else if была корректной. Внутри внешнего условия по возрасту нужно выбрать правильные ключевые слова для открытия вложенных блоков с проверкой наличия билета и права на скидку. Кликайте по пропускам и выбирайте подходящий вариант из выпадающего списка, чтобы получить логичную цепочку условий.
public class SelectCorrectNesting {
public static void main(String[] args) {
int age = 70;
boolean hasTicket = true;
if (age >= 18) {
input1S (hasTicket) {
System.out.println("Обычный вход");
} input2S (age > 65) {
System.out.println("Скидка для пенсионера");
} } }