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

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

Модуль 1. Java Syntax
4 уровень , 3 лекция
Открыта

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, 4 уровень, 3 лекция
Недоступна
Я никогда не буду работать за копейки
Используя цикл while вывести на экран сто раз цитату (переменная quote): «Я никогда не буду работать за копейки. Амиго» Каждое значение вывести с новой строки.
4
Задача
Java Syntax Pro, 4 уровень, 3 лекция
Недоступна
Все любят Мамбу
Ввести с клавиатуры имя и, используя цикл while, 10 раз вывести: <имя> любит меня (переменная text). Каждый вывод - с новой строки. Пример вывода на экран для имени Света: Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Света любит меня. Св
4
Задача
Java Syntax Pro, 4 уровень, 3 лекция
Недоступна
Суммирование
Напишем программу, в которой нужно вводить с клавиатуры целые числа и считать их сумму, пока пользователь не введет слово "ENTER". Вывести на экран полученную сумму и завершить программу.
4
Задача
Java Syntax Pro, 4 уровень, 3 лекция
Недоступна
Заполненный прямоугольник
Используя вложенные циклы while (цикл в цикле) выведи на экран прямоугольник размером 5 (высота) на 10 (ширина), заполненный буквой 'Q'.
4
Задача
Java Syntax Pro, 4 уровень, 3 лекция
Недоступна
Незаполненный прямоугольник
Используя вложенные циклы while (цикл в цикле) выведи на экран незаполненный прямоугольник (его контур) размером 10 (высота) на 20 (ширина) из букв 'Б'. Незаполненная часть состоит из пробелов.
Комментарии (12)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Константин Уровень 24
17 октября 2024
Можно без "ИЛИ" : if (x>0) q = y>0 ? 1 : 4; else q = y>0 ? 2 : 3; System.out.println(q);
Светлана Уровень 19 Expert
15 октября 2022
мне кажется, более читабельно и самим же понятнее не городить сравнение в одну строку, а разбить на несколько булевых переменных код понятнее, риск запутаться меньше
Евгений Уровень 9 Expert
6 декабря 2022
Если не сравнивать в одной строке, то таким образом код будет более загружен и работать будет дольше.
Stas S Уровень 108 Expert
21 января 2022
Интересно, что при сравнении: Если (сторона1 > (сумма 2 других) ИЛИ сторона2 > (сумма 2 других) ИЛИ сторона3 > (сумма 2 других)) Выводим (Треугольник Не Существует) Иначе Выводим (Треугольник Существует) Не проходит 4 пункт валидации. Хотя все значения отрабатывают корректно.
25 января 2022
Ибо должно быть И а не ИЛИ. В условии ИЛИ если хотя бы одно выражение будет верно, то и все выражение станет верным. При использовании ИЛИ программа решит что треугольник 1 2 3 может существовать)
Stas S Уровень 108 Expert
25 января 2022
Моя невнимательность. Благодарю
hidden #2917325 Уровень 19
26 января 2022
Как раз таки если хотя бы одно условие выполнится , значит треугольник не существует!!!Что нам и нужно проверить , а по вашей логике , должны выполниться все условия сразу и только в таком случае выражение выполнится) Если (Сторона1 >= (сумма 2 других) ИЛИ сторона2 >= (сумма 2 других) ИЛИ сторона3 >= (сумма 2 других) { sout(не существует); }иначе{ sout (Существует); И в условии прописано , что сторона не может быть больше или равна сумме двух других) и треугольник 1 2 3 не будет существовать) Так же смотря что ставить так сказать в истину, существование треугольника или НЕ) В случае как писал человек , корректнее использовать ИЛИ
Евгений Уровень 9 Expert
6 декабря 2022
Может будет интересно, но выше закинул 3 варианта решения. Один из которых, как раз объясняет Ваш вопрос ;)
Виктор Уровень 7
7 января 2022
Один if один else в хард задаче
Эдуард Уровень 108 Expert
12 декабря 2021
Привет всем. Один момент по задаче Координатные четверти. Тип byte не проходит валидацию, лишь int. Остальные типы не пробовал. Всем удачи!
Владимир Уровень 109 Expert
18 января 2022
в большинстве случаев если просят ввести число, то используй int, в противном случае в условии скажут что именно.
Алексей Уровень 5
4 декабря 2024
Спасибо! 4 попытки потратил на решение с использованием byte для координат, поменял на int и заработало. Не понятно почему задача не проходит проверку с byte, учитывая что компилятор возвращает одинаковый результат