МОДУЛЬ 3 · УРОК 3
Логические операторы: &&, ||, !
Одного условия часто недостатко. Нужно проверить: «возраст >= 18 И есть билет И есть паспорт». Логические операторы позволяют комбинировать несколько условий в одно.
⏱ ~20 минут
🎓 Для начинающих
📌 Модуль 3
🔗 && — логическое И (AND)
&& возвращает true, только когда оба условия true. Если хотя бы одно false — результат false:
public class LogicalAnd {
public static void main(String[] args) {
int age = 25;
boolean hasID = true;
boolean hasTicket = true;
// Все три условия должны быть true
if (age >= 18 && hasID && hasTicket) {
System.out.println("Добро пожаловать!");
} else {
System.out.println("Доступ запрещён");
}
// Пример с двумя условиями
int temperature = 25;
boolean isRaining = false;
if (temperature > 20 && !isRaining) {
System.out.println("Идеальная погода для прогулки");
}
}
}
Аналогия: && — это замок с двумя ключами. Оба ключа должны подойти, чтобы открыть.
Таблица истинности &&
| A | B | A && B |
| true | true | true |
| true | false | false |
| false | true | false |
| false | false | false |
🔗 || — логическое ИЛИ (OR)
|| возвращает true, если хотя бы одно условие true:
public class LogicalOr {
public static void main(String[] args) {
boolean isWeekend = true;
boolean isHoliday = false;
if (isWeekend || isHoliday) {
System.out.println("Можно отдохнуть!");
}
// Проверка нескольких вариантов
char grade = 'B';
if (grade == 'A' || grade == 'B' || grade == 'C') {
System.out.println("Вы сдали экзамен!");
}
}
}
Таблица истинности ||
| A | B | A || B |
| true | true | true |
| true | false | true |
| false | true | true |
| false | false | false |
🚫 ! — логическое НЕ (NOT)
! инвертирует boolean-значение:
boolean sunny = true;
boolean needUmbrella = !sunny; // false — солнечно, зонт не нужен
int age = 15;
boolean isAdult = !(age >= 18); // false — несовершеннолетний
⚡ Short-circuit evaluation подробно
Java использует ленивое вычисление:
public class ShortCircuit {
public static void main(String[] args) {
int x = 0;
// && — если левая false, правая НЕ вычисляется
boolean result1 = (x != 0) && (10 / x > 1);
System.out.println(result1); // false — без деления на ноль!
// || — если левая true, правая НЕ вычисляется
boolean result2 = (x == 0) || (10 / x > 1);
System.out.println(result2); // true — без деления на ноль!
// Практический пример: проверка null перед обращением
String text = null;
// Безопасно: сначала проверяем на null
if (text != null && text.length() > 0) {
System.out.println("Строка не пустая");
}
}
}
💡 Паттерн: Ставьте «быстрые» и «безопасные» проверки первыми. list != null && list.size() > 0 — сначала null, потом size().
📐 Законы де Моргана
Математические правила, которые помогают упрощать логические выражения:
// Закон де Моргана 1: !(A && B) == (!A || !B)
boolean a = true;
boolean b = false;
System.out.println(!(a && b)); // true
System.out.println(!a || !b); // true — то же самое!
// Закон де Моргана 2: !(A || B) == (!A && !B)
System.out.println(!(a || b)); // false
System.out.println(!a && !b); // false — то же самое!
// Практическое применение:
// Упрощаем отрицание сложного условия
boolean age = true;
boolean hasTicket = false;
// Было: if (!(age && hasTicket)) {
// Стало: if (!age || !hasTicket) {
if (!age || !hasTicket) {
System.out.println("Доступ запрещён");
}
✅ Итоги урока
&&— оба должны быть true||— хотя бы один должен быть true!— инвертирует значение- Short-circuit: правая часть не вычисляется, если результат определён
- Законы де Моргана:
!(A && B) = !A || !B,!(A || B) = !A && !B - Ставьте «быстрые» проверки первыми (null-проверки)
Далее: Тернарный оператор — компактная замена if-else →
Проверяем понимание
4 вопроса