- Составлять условия с операторами сравнения и логическими операторами
- Использовать
if,else if,elseи тернарный оператор - Различать классический оператор
switchи современное switch-выражение
Если холодно — надень куртку, если идёт дождь — возьми зонт. Мы каждый день принимаем решения в зависимости от условий. Программы делают то же самое: банкомат выдаёт деньги, только если PIN-код верный, а игра заканчивается, когда жизни падают до нуля. В этом уроке ты научишь программу на Java принимать решения.
Операторы сравнения и логические операторы
Условие всегда даёт значение типа boolean: true или false. Условия строят с помощью операторов сравнения, а несколько условий объединяют логическими операторами.
| Оператор | Значение | Пример | Результат |
|---|---|---|---|
== | равно | age == 15 | true |
!= | не равно | age != 15 | false |
< > | меньше, больше | age > 18 | false |
<= >= | меньше или равно, больше или равно | age >= 12 | true |
&& | И: оба условия истинны | age > 10 && age < 18 | true |
|| | ИЛИ: истинно хотя бы одно условие | age < 6 || age > 65 | false |
! | НЕ: меняет результат на противоположный | !(age == 15) | false |
age = 15.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 проверяет условия сверху вниз и выполняет блок первого истинного — остальные пропускаются.
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):
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.
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
Главное
- Условие даёт
boolean; для сравнения используют==,!=,<,>,<=,>=. &&(И),||(ИЛИ) и!(НЕ) объединяют условия; Java не вычисляет часть, которая уже не изменит результат.- В цепочке
if / else if / elseвыполняется только блок первого истинного условия. - Тернарный оператор
условие ? A : Bвыбирает одно из двух значений. - В классическом
switchбезbreakвыполнение проваливается в следующийcase; switch-выражение со стрелкой->возвращает значение и не проваливается.
Проверь себя
Вопросов: 10. Каждый правильный ответ приносит XP.
age > 10 && age < 14, если age = 15?