if / else
Программа становится умной, когда она принимает решения. «Если переменная больше нуля — выведи одно, иначе — другое». Конструкция if/else — это основа всей логики в программировании.
🔀 Простой 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 (условие) { ... }— выполняется если условие trueelse { ... }— выполняется если условие falseelse if (условие) { ... }— цепочка проверок- Порядок проверок важен: от строгих к менее строгим
- Всегда используйте фигурные скобки
{} - Не путайте
=(присваивание) и==(сравнение) - Вложенные if можно часто упростить через
&&
Далее: Логические операторы — &&, ||, ! подробно →
Проверяем понимание
4 вопроса