JavaRush/Курсы/Модуль 1. Java Syntax/Логические операции

Логические операции

Открыта

1. Булева логика

В языке Java нельзя записать выражение 18 < age < 65 — оно будет синтаксически некорректным и программа не скомпилируется.

Зато можно записать его так:

(18 < age) И (age < 65)

Разумеется, вместо слова И там будет другой логический оператор, и сейчас мы как раз поговорим о них подробнее.

В Java есть три логических оператора: AND (и), OR (или) и NOT (не).

Хорошая новость: используя скобки, можно построить логические выражения любой сложности.

Плохая новость: разработчики Java решили вместо слов and, or и not, использовать обозначения из языка C.

Внимание на экран:

Логический оператор Ожидание Реальность
И (∧) and &&
ИЛИ (∨) or ||
НЕ (¬) not !

Вот несколько примеров использования логических операторов в Java:

Выражение Расшифровка Пояснение
(0 < a) && (a < 100)
(0 < a) and (a < 100)
(0 < a) И (a < 100)
(!a) && (!b)
(not a) and (not b)
(НЕ a) И (НЕ b)
!(!a || !b)
not((not a) or (not b))
НЕ((НЕ a) ИЛИ (НЕ b))

2. Примеры использования операторов сравнения и булевых переменных

Там, где можно написать логическое выражение, можно написать и логическую переменную.

Например:

Код Пояснение
int age = 35;
if (age >= 18 && age <= 65)
   System.out.println("Вы можете работать");
Если значение age лежит между 18 и 65, на экран выводится текст «вы можете работать».
int age = 35;
boolean isYoung = (age < 18);
if (!isYoung && age <= 65)
   System.out.println("Вы можете работать");
Мы создали переменную isYoung и вынесли в нее первую часть выражения. Только заменили age >= 18 на age < 18.
int age = 35;
boolean isYoung = (age < 18);
boolean isOld = (age > 65);
if (!isYoung && !isOld)
   System.out.println("Вы можете работать");
Мы создали переменную isOld и вынесли в нее вторую часть выражения. При этом заменили age <= 65 на age > 65.

Эти три примера эквивалентны. Только во втором мы вынесли часть выражения из условия if в отдельную логическую переменную – isYoung. В третьем примере мы вынесли вторую часть выражения во вторую переменную — isOld.


3. Логическая арифметика

Вкратце пройдемся по логическим операциям.

Оператор AND, он же И, он же &&, он же конъюнкция.

Выражение Результат
true && true
true
true && false
false
false && true
false
false && false
false

Другими словами, результат выражения равен true (истина) только если оба значения, которые участвуют в выражении, равны true (истина). В остальных случаях всегда false (ложь).

Оператор OR, он же ИЛИ, он же ||, он же дизъюнкция.

Выражение Результат
true || true
true
true || false
true
false || true
true
false || false
false

Другими словами, результат выражения равен true (истина) всегда, если хотя бы одно значение, участвующее в выражении, равно true (истина). Если оба равны false, то результат false.

Оператор NOT, он же НЕ, он же !, он же инверсия.

Выражение Результат
!true
false
!false
true

Меняет true на false и наоборот.

Полезные выражения:

Выражение Результат
m && !m
false
m || !m
true
!(a && b)
!a || !b
!(a || b)
!a && !b
4
Задача
Java Syntax Pro Beta,  4 уровень3 лекция
Недоступна
Я никогда не буду работать за копейки
Используя цикл while вывести на экран сто раз цитату (переменная quote): «Я никогда не буду работать за копейки. Амиго» Каждое значение вывести с новой строки.
4
Задача
Java Syntax Pro Beta,  4 уровень3 лекция
Недоступна
Все любят Мамбу
Ввести с клавиатуры имя и, используя цикл while, 10 раз вывести: <имя> любит меня (переменная text). Каждый вывод - с новой строки. Пример вывода на экран для имени Света: Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Св
4
Задача
Java Syntax Pro Beta,  4 уровень3 лекция
Недоступна
Суммирование
Напишем программу, в которой нужно вводить с клавиатуры целые числа и считать их сумму, пока пользователь не введет слово "ENTER". Вывести на экран полученную сумму и завершить программу.
4
Задача
Java Syntax Pro Beta,  4 уровень3 лекция
Недоступна
Заполненный прямоугольник
Используя вложенные циклы while (цикл в цикле) выведи на экран прямоугольник размером 5 (высота) на 10 (ширина), заполненный буквой 'Q'.
4
Задача
Java Syntax Pro Beta,  4 уровень3 лекция
Недоступна
Незаполненный прямоугольник
Используя вложенные циклы while (цикл в цикле) выведи на экран незаполненный прямоугольник (его контур) размером 10 (высота) на 20 (ширина) из букв 'Б'. Незаполненная часть состоит из пробелов.
Комментарии (14)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Морозов КонстантинBackend Developer в RCIT
4 июня 2025, 12:30
int quarterResult = (x > 0)
            ? (y > 0 ? 1 : 4)
            : (y > 0 ? 2 : 3);
По поводу задачи с определением четверти. Сам не люблю сложные конструкции, как и тернарные операторы (редко ими пользуюсь), но здесь она выглядит вполне неплохо. Да и усложнять логику if / else ради этой задачи смысла как такового не вижу. Поэтому просто смотрю на положительный x и y, а оттуда и пляшем
СемёнВрач в в деревенской поликл
1 февраля 2025, 17:25
int result = x > 0 ? y > 0 ? 1 : 4 : y > 0 ? 2 : 3;
КонстантинBackend Developer в TOO BTS
17 октября 2024, 11:54
Можно без "ИЛИ" : if (x>0) q = y>0 ? 1 : 4; else q = y>0 ? 2 : 3; System.out.println(q);
Светлана
Уровень 1
Expert
15 октября 2022, 02:19
мне кажется, более читабельно и самим же понятнее не городить сравнение в одну строку, а разбить на несколько булевых переменных код понятнее, риск запутаться меньше
Евгений
Уровень 9
Expert
6 декабря 2022, 16:26
Если не сравнивать в одной строке, то таким образом код будет более загружен и работать будет дольше.
Stas S
Уровень 108
Expert
21 января 2022, 05:55
Интересно, что при сравнении: Если (сторона1 > (сумма 2 других) ИЛИ сторона2 > (сумма 2 других) ИЛИ сторона3 > (сумма 2 других)) Выводим (Треугольник Не Существует) Иначе Выводим (Треугольник Существует) Не проходит 4 пункт валидации. Хотя все значения отрабатывают корректно.
25 января 2022, 13:31
Ибо должно быть И а не ИЛИ. В условии ИЛИ если хотя бы одно выражение будет верно, то и все выражение станет верным. При использовании ИЛИ программа решит что треугольник 1 2 3 может существовать)
Stas S
Уровень 108
Expert
25 января 2022, 14:46
Моя невнимательность. Благодарю
hidden #2917325
Уровень 19
26 января 2022, 21:51
Как раз таки если хотя бы одно условие выполнится , значит треугольник не существует!!!Что нам и нужно проверить , а по вашей логике , должны выполниться все условия сразу и только в таком случае выражение выполнится) Если (Сторона1 >= (сумма 2 других) ИЛИ сторона2 >= (сумма 2 других) ИЛИ сторона3 >= (сумма 2 других) { sout(не существует); }иначе{ sout (Существует); И в условии прописано , что сторона не может быть больше или равна сумме двух других) и треугольник 1 2 3 не будет существовать) Так же смотря что ставить так сказать в истину, существование треугольника или НЕ) В случае как писал человек , корректнее использовать ИЛИ
Евгений
Уровень 9
Expert
6 декабря 2022, 16:27
Может будет интересно, но выше закинул 3 варианта решения. Один из которых, как раз объясняет Ваш вопрос ;)
Виктор
Уровень 7
7 января 2022, 10:42
Один if один else в хард задаче
Эдуард
Уровень 1
Expert
12 декабря 2021, 08:16
Привет всем. Один момент по задаче Координатные четверти. Тип byte не проходит валидацию, лишь int. Остальные типы не пробовал. Всем удачи!
Владимир
Уровень 109
Expert
18 января 2022, 21:45
в большинстве случаев если просят ввести число, то используй int, в противном случае в условии скажут что именно.
Алексей ТиньковPerformance Tech Lead в Леруа Мерлен Цифровы
4 декабря 2024, 22:32
Спасибо! 4 попытки потратил на решение с использованием byte для координат, поменял на int и заработало. Не понятно почему задача не проходит проверку с byte, учитывая что компилятор возвращает одинаковый результат