Перейти к содержанию
Educora
Начальный15 мин4 / 18

Условия и switch

Научи программу принимать решения: операторы сравнения, логические операторы, if/else, тернарный оператор, switch и switch-выражения.

Проверь себя
В этом уроке ты узнаешь
  • Составлять условия с операторами сравнения и логическими операторами
  • Использовать if, else if, else и тернарный оператор
  • Различать классический оператор switch и современное switch-выражение

Если холодно — надень куртку, если идёт дождь — возьми зонт. Мы каждый день принимаем решения в зависимости от условий. Программы делают то же самое: банкомат выдаёт деньги, только если PIN-код верный, а игра заканчивается, когда жизни падают до нуля. В этом уроке ты научишь программу на Java принимать решения.

Операторы сравнения и логические операторы

Условие всегда даёт значение типа boolean: true или false. Условия строят с помощью операторов сравнения, а несколько условий объединяют логическими операторами.

ОператорЗначениеПримерРезультат
==равноage == 15true
!=не равноage != 15false
< >меньше, большеage > 18false
<= >=меньше или равно, больше или равноage >= 12true
&&И: оба условия истинныage > 10 && age < 18true
||ИЛИ: истинно хотя бы одно условиеage < 6 || age > 65false
!НЕ: меняет результат на противоположный!(age == 15)false
В примерах age = 15.
Java
public class Main {
    public static void main(String[] args) {
        int age = 15;
        boolean hasTicket = true;
        System.out.println(age >= 12 && hasTicket);
        System.out.println(age < 12 || !hasTicket);
        System.out.println(age == 15);
        System.out.println(age != 15);
        if (hasTicket && age >= 12) {
            System.out.println("Welcome to the film!");
        } else {
            System.out.println("Sorry, no entry.");
        }
    }
}
Ожидаемый результат
true
false
true
false
Welcome to the film!
Интерактив
Загрузка симуляции…
&& работает как логический элемент И (AND): на выходе true (1), только если оба входа true. Переключай входы и сверяйся с таблицей истинности.

if, else if и else

После ключевого слова if в круглых скобках пишут условие, а в фигурных — код, который выполнится, если условие истинно. else if проверяет следующее условие, а else срабатывает, когда не выполнено ни одно. Java проверяет условия сверху вниз и выполняет блок первого истинного — остальные пропускаются.

Java
public class Main {
    public static void main(String[] args) {
        int score = 78;
        if (score >= 90) {
            System.out.println("Excellent");
        } else if (score >= 70) {
            System.out.println("Good");
        } else if (score >= 50) {
            System.out.println("Pass");
        } else {
            System.out.println("Fail");
        }
        String result = score >= 50 ? "passed" : "failed";
        System.out.println("The test is " + result);
    }
}
Ожидаемый результат
Good
The test is passed

78 больше и 70, и 50, но напечаталось только «Good», потому что первым истинным условием было score >= 70. В последних строках используется тернарный оператор: условие ? A : B. Если условие истинно, значение выражения — A, иначе — B. Это короткая замена if/else, когда нужно выбрать одно из двух значений.

Классический switch

Если нужно сравнить переменную со множеством конкретных значений, вместо длинной цепочки if/else if можно написать switch. Он работает со значениями int, char, String и enum. В классической форме каждый case должен заканчиваться break — иначе выполнение «проваливается» в следующий case (fall-through):

Java
public class Main {
    public static void main(String[] args) {
        int level = 2;
        switch (level) {
            case 1:
                System.out.println("Easy");
            case 2:
                System.out.println("Medium");
            case 3:
                System.out.println("Hard");
                break;
            default:
                System.out.println("Unknown level");
        }
    }
}
Ожидаемый результат
Medium
Hard

level равен 2, поэтому выполнение начинается с case 2. Так как в case 2 нет break, программа проваливается в case 3 и печатает ещё и «Hard». Выйти из switch позволяет только break. А блок default срабатывает, если не подошёл ни один case.

Switch-выражения

Начиная с Java 14 switch можно записывать и как выражение: он возвращает значение, которое можно сразу присвоить переменной. В ветках со стрелкой -> нет «проваливания», break не нужен, а в одном case можно перечислить несколько значений через запятую. Если нужен целый блок, значение возвращают с помощью yield.

Java
public class Main {
    public static void main(String[] args) {
        String day = "SAT";
        String type = switch (day) {
            case "SAT", "SUN" -> "weekend";
            case "MON", "TUE", "WED", "THU", "FRI" -> "weekday";
            default -> "unknown";
        };
        System.out.println(day + " is a " + type);
        int month = 2;
        int year = 2028;
        int days = switch (month) {
            case 4, 6, 9, 11 -> 30;
            case 2 -> {
                boolean leap = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
                yield leap ? 29 : 28;
            }
            default -> 31;
        };
        System.out.println("Days in month " + month + ": " + days);
    }
}
Ожидаемый результат
SAT is a weekend
Days in month 2: 29
2028 год високосный, поэтому в феврале 29 дней.

Главное

  • Условие даёт boolean; для сравнения используют ==, !=, <, >, <=, >=.
  • && (И), || (ИЛИ) и ! (НЕ) объединяют условия; Java не вычисляет часть, которая уже не изменит результат.
  • В цепочке if / else if / else выполняется только блок первого истинного условия.
  • Тернарный оператор условие ? A : B выбирает одно из двух значений.
  • В классическом switch без break выполнение проваливается в следующий case; switch-выражение со стрелкой -> возвращает значение и не проваливается.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Чему равно age > 10 && age < 14, если age = 15?