$ sudo teach IT
МОДУЛЬ 3 · УРОК 2

if / else

Программа становится умной, когда она принимает решения. «Если переменная больше нуля — выведи одно, иначе — другое». Конструкция if/else — это основа всей логики в программировании.

⏱ ~25 минут 🎓 Для начинающих 📌 Модуль 3

🔀 Простой if

Конструкция if выполняет блок кода только если условие истинно (true). Если условие false — блок пропускается:

public class SimpleIf {
    public static void main(String[] args) {
        int temperature = 35;

        if (temperature > 30) {
            System.out.println("Жарко!");
        }

        System.out.println("Программа продолжается");
    }
}

Если temperature = 35, условие 35 > 30 истинно, и выведется «Жарко!». Если бы temperature было 20 — условие ложно, и «Жарко!» бы не вывелось, но «Программа продолжается» вывелось бы в любом случае.

Важные правила:

  • Условие должно быть boolean выражением
  • Фигурные скобки {} необязательны для одного оператора, но настоятельно рекомендуются
  • Отступ (indentation) — визуальное средство, Java его игнорирует, но люди — нет
// Без скобок — работает, но ПЛОХАЯ практика
if (temperature > 30)
    System.out.println("Жарко!");

// Со скобками — ПРАВИЛЬНАЯ практика
if (temperature > 30) {
    System.out.println("Жарко!");
}

// Опасность без скобок:
if (temperature > 30)
    System.out.println("Жарко!");
    System.out.println("Это НЕ часть if!");  // Выведется всегда!

🚫 Всегда используйте фигурные скобки! Без них легко допустить ошибку, добавив второй оператор, который не будет частью if.

🔀 if-else: два пути

Конструкция else выполняет альтернативный блок, когда условие ложно:

public class IfElse {
    public static void main(String[] args) {
        int age = 15;

        if (age >= 18) {
            System.out.println("Добро пожаловать!");
        } else {
            System.out.println("Извините, вам ещё нет 18");
        }
    }
}

Это как выключатель: либо одна ветка, либо другая. Никогда обе одновременно.

public class EvenOdd {
    public static void main(String[] args) {
        int number = 7;

        if (number % 2 == 0) {
            System.out.println(number + " — чётное");
        } else {
            System.out.println(number + " — нечётное");
        }
    }
}

🔗 Цепочка else if

Когда нужно проверить несколько условий по очереди:

public class GradeChecker {
    public static void main(String[] args) {
        int score = 85;

        if (score >= 90) {
            System.out.println("Отлично! (A)");
        } else if (score >= 80) {
            System.out.println("Хорошо! (B)");
        } else if (score >= 70) {
            System.out.println("Удовлетворительно (C)");
        } else if (score >= 60) {
            System.out.println("Плохо (D)");
        } else {
            System.out.println("Провал (F)");
        }
    }
}

Порядок важен! Java проверяет условия сверху вниз и выполняет первое истинное. Если поменять местами >= 80 и >= 90, результат будет другим.

// НЕПРАВИЛЬНЫЙ порядок:
if (score >= 60) {          // 85 >= 60 → true!
    System.out.println("Плохо (D)");
} else if (score >= 90) {   // Эта ветка никогда не выполнится для 85
    System.out.println("Отлично!");
}

Правило: самые строгие условия — первыми (от большего к меньшему).

🪆 Вложенные if

if можно вкладывать друг в друга для проверки нескольких условий одновременно:

public class NestedIf {
    public static void main(String[] args) {
        int age = 25;
        boolean hasTicket = true;

        if (age >= 18) {
            if (hasTicket) {
                System.out.println("Проходите!");
            } else {
                System.out.println("Купите билет");
            }
        } else {
            System.out.println("Дети до 18 не допускаются");
        }
    }
}

Но вложенные if часто можно упростить, объединив условия через &&:

// Упрощённая версия:
if (age >= 18 && hasTicket) {
    System.out.println("Проходите!");
} else if (age >= 18) {
    System.out.println("Купите билет");
} else {
    System.out.println("Дети до 18 не допускаются");
}

⚠️ Ошибка: if (x = 5) вместо if (x == 5)

Это одна из самых коварных ошибок. = — присваивание, == — сравнение:

public class AssignmentBug {
    public static void main(String[] args) {
        int x = 10;

        // ОШИБКА КОМПИЛЯЦИИ:
        // if (x = 5) {  // int нельзя присвоить в boolean!
        //     System.out.println("x равно 5");
        // }

        // Но с boolean:
        boolean flag = false;
        if (flag = true) {  // Это ПРИСВАИВАНИЕ! flag становится true
            System.out.println("Всегда выполнится!");
        }

        // Правильно:
        if (x == 5) {
            System.out.println("x равно 5");
        }
    }
}

С intJava поймает ошибку (нельзя присвоить int в boolean). Но с boolean присваивание合法, и if (flag = true) — это валидный (но глупый) код, который всегда выполняется.

💡 Совет: В IntelliJ IDEA можно включить предупреждение на присваивание в условии. Это поможет избежать этой ошибки.

🛠️ Практический пример: определение времени дня

public class TimeOfDay {
    public static void main(String[] args) {
        int hour = 14;

        if (hour >= 0 && hour < 6) {
            System.out.println("Ночь");
        } else if (hour >= 6 && hour < 12) {
            System.out.println("Утро");
        } else if (hour >= 12 && hour < 18) {
            System.out.println("День");
        } else if (hour >= 18 && hour < 24) {
            System.out.println("Вечер");
        } else {
            System.out.println("Неверный час!");
        }
    }
}

✅ Итоги урока

  • if (условие) { ... } — выполняется если условие true
  • else { ... } — выполняется если условие false
  • else if (условие) { ... } — цепочка проверок
  • Порядок проверок важен: от строгих к менее строгим
  • Всегда используйте фигурные скобки {}
  • Не путайте = (присваивание) и == (сравнение)
  • Вложенные if можно часто упростить через &&

Далее: Логические операторы — &&, ||, ! подробно →

Проверяем понимание

4 вопроса

Калькулятор оценки

Premium

Положительное, отрицательное или ноль

Premium