JavaRush /Курсы /Java Syntax Pro /Логические операции

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

Java Syntax Pro
3 уровень , 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


Комментарии (581)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Денис Уровень 4
14 октября 2025
В задаче указано от 20 до 60 лет включительно, но в правильном решении стоит if (age < 20 || age > 60) В итоге мое решение не верно if (age <= 20 || age >= 60) { System.out.println("можно не работать"); }
Quantic_Kid Уровень 12
15 ноября 2025
Имеллось ввиду что включительный возраст работы от 20 до 60. По сути мы в условии выделяем что "если возраст меньше 20"(не включительно - если 20, можешь работать). Так точно и другое "если возраст больше 60" (60 не включительно), тогда тоже не работай. Твое решение правильное, если бы цель была наоборот сказать " нужно работать".
Big198801 Уровень 27
13 августа 2025
if(((a + b) <= c) || ((a + c) <= b) || ((b + c) <= a))){ System.out.println(TRIANGLE_NOT_EXISTS); }else System.out.println(TRIANGLE_EXISTS);
Gris Hiver Уровень 1
28 июля 2025
Я сначала не знала, что входящие аргументы можно менять в Input data. Не повторяйте моих ошибок) Меняйте аргументы и тестируйте прежде чем отправлять на проверку.
Anonymous #3516548 Уровень 4
20 июля 2025
use &&
Evgeny Rassadnikov Уровень 8
17 июня 2025
Чет слишком простая задача
Anonymous #3585174 Уровень 33
26 мая 2025
like
23 мая 2025
Scanner sc = new Scanner (System.in); int x = sc.nextInt(); int y = sc.nextInt(); if (x>0&&y>0){ System.out.println("1"); }else if (x<0&&y>0){ System.out.println("2"); }else if (x<0&&y<0){ System.out.println("3"); }else System.out.println("4");
Yaroslav Уровень 8
1 августа 2025
неверное решение, хотя проверку пройдет. попробуйте ввести одну из координат 0 и этот код выдаст 4. проверьте условие для четвертой четверти.
23 мая 2025
Scanner sc = new Scanner (System.in); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); boolean isTrinagle = a>=b+c||b>=a+c||c>=a+b; if (!isTrinagle){ System.out.println(TRIANGLE_EXISTS); }else System.out.println(TRIANGLE_NOT_EXISTS);
Yaroslav Уровень 8
1 августа 2025
неверное решение, хотя проверку пройдет. попробуйте ввести одну из сторон, равную сумме двух других сторон - программа выдаст "треугольник существует", что неверно. проверьте условия сравнения.
15 августа 2025
Почему же. Допустим a=2, b=2, c=4 то будут сложены a+c>b или b+c>a. Задача не станет сравнивать a+b=c. Ведь в условии говорится что если любые две стороны в сумме будут больше третьей то треугольник существует. То есть, насколько я понял, программа вряд ли скажет что треугольник не существует при таких условиях.
Yaroslav Уровень 8
24 августа 2025
Поправлюсь, решение идет не по первому условию, а по второму. Это ввело в заблуждение. Решение верное.
Random Уровень 6
15 мая 2025

public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a, b, c;
        a = input.nextInt();
        b = input.nextInt();
        c = input.nextInt();
        //длина одной стороны всегда меньше суммы длин двух других сторон:
        if ((a < b + c) && (b < a + c) && (c < a + b)) System.out.println(TRIANGLE_EXIST);
        else System.out.println(TRIANGLE_NOT_EXIST);
    }
Mikhailo Bohatov Уровень 7
13 мая 2025
всмысле !(а)&&(b)=!a||!b типо так ! влияет или почему && стало||