JavaRush/Курси/Java Syntax Zero/Логічні операції

Логічні операції

Відкрита

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))

3
Задача
Java Syntax Zero,  3 рівень,  6 лекція
Недоступна
Трикутник
Трикутник

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
Задача
Java Syntax Zero,  3 рівень,  6 лекція
Недоступна
Працювати чи не працювати — отаке питання
Працювати чи не працювати — отаке питання

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

3
Задача
Java Syntax Zero,  3 рівень,  6 лекція
Недоступна
Координатні чверті
Координатні чверті
Коментарі (24)
  • популярні
  • нові
  • старі
Щоб залишити коментар, потрібно ввійти в систему
hidden #3500645
Рівень 30
4 жовтня 2024, 09:47
Трошки голова зламалася на останніх двох корисних виразах !(a && b) = !a || !b !(a || b) = !a && !b але це просто представлення правил де Моргана з алгебри виходить Правила де Моргана: Заперечення кон'юнкції (і): ¬(A ∧ B) = ¬A ∨ ¬B Заперечення виразу «A і B» рівне виразу «не A або не B». Заперечення диз'юнкції (або): ¬(A ∨ B) = ¬A ∧ ¬B Заперечення виразу «A або B» рівне виразу «не A і не B». це важкувато зрозуміти, чому ось так невірно: !(a && b) = !a && !b Заперечення виразу «A і B» рівне виразу «не A і не B». !(a || b) = !a || !b Заперечення виразу «A або B» рівне виразу «не A або не B». просто варто запам'ятати напевно та і все
hidden #3500645
Рівень 30
3 жовтня 2024, 08:49
У першій задачі вперше показано атрибут класа:
private static final
У новачків може виникнути питання, чому String винесено за межі методу:
public class Solution {
    private static final String TRIANGLE_EXISTS = "трикутник існує";
    private static final String TRIANGLE_NOT_EXISTS = "трикутник не існує";

    public static void main(String[] args) {
        //напишіть тут ваш код
    }
}
Адже раніше бачили тільки такий метод роботи зі змінними типу String:
public class Solution {
    public static void main(String[] args) {
        String TRIANGLE_EXISTS = "трикутник існує";
        String TRIANGLE_NOT_EXISTS = "трикутник не існує";
    }
}
Можливо комусь корисна буде інформація, яку я знайшла в інших джерелах: Справа в тому, що у Java існує окремий атрибут класу, який недоступний для інших класів, називається приватна статична змінна. Цей атрибут ідеально підходить для констант, тобто значень чи величин, які в подальшому неможливо або не потрібно змінювати. Приватні статичні змінні ідеально підходять для збереження внутрішнього стану класу у вигляді недоступної капсули. До нього можна отримати доступ тільки спеціальними методами класу. Використовуючи модифікатор final, можна гарантувати незмінність константи. Гарним прикладом є число Пі, його значення незмінне, тому його можна винести за межі методу і задати його як приватну статичну змінну.
public class MathConstants {
    private static final double Pi = 3.14159;
}
Приватні статичні змінні виділяють пам'ять лише один раз, у рамках JVM, що робить їх ефективними з точки зору використання ресурсів. Вони "живуть" в області методів, а не в "кучі", де розташовані змінні екземпляри.
ZSUnix Навідник артилерійського в ЗСУ
31 липня 2024, 16:42
попередження для тих, хто працює з мобільного, будьте уважні коли користуєтеся автовведеням, може вставляти ХЗ куди. приклад: програмка на дві з половиною строчки, а воно мені пише: помилка компіляції в стрічці 53! ледь розібралася. виявилося воно встромило вивод даних аж в 53 строку, якої по ідеї в програмі навіть існувати не повино... ПС. до одмінів ресурсу: це зальот хлопці. тра розібразися з глюком.
Дмитро
Рівень 4
Expert
10 травня 2024, 14:47
я зовсім нічого не розумію
Pavlo
Рівень 8
10 травня 2024, 18:24
все буде добре)
Roman
Рівень 13
17 січня 2023, 13:08
в чому різниця між & і &&? код компілюється в обох випадках
Denys
Рівень 10
23 лютого 2023, 11:10
При & завжди проводиться перевірка умов з 2-х боків від оператора При && проводиться з лівої сторони завжди, а за правої тільки якщо ліва відповідає умові. && використовується у 99% випадків для економії ресурсів, але інколи є специфічні випадки коли потрібно використовувати &
Vitalii Backend Developer
27 липня 2023, 15:17
& це булева математика. Воно не повертатиме true чи false. воно повертатиме число)
Yaroslav Tkachyk
Рівень 23
Expert
1 грудня 2022, 16:16
Не зовсім зрозумів останні корисні вирази: !(a && b) - результат !а || !b !(a || b) - результат !а && !b Поясніть будь ласка для новачка.
Yaroslav Tkachyk
Рівень 23
Expert
1 грудня 2022, 16:33
Розібрався мабуть :) Наприклад: a - true b - true Тоді зліва: (a && b) - також true !(a && b) - false Тоді справа: !a - false !b - false (!a || !b) - також false
Ledzen
Рівень 4
26 лютого 2023, 13:51
Привіт, як я бачу ви з цього рівня за рік дійшли до 20го, розкажіть як багато на день займаєтесь?) Можливо є якісь цікаві хаки як не закинути програмування мені дуже цікаво) я 2гий раз сів навчатись перший раз мене хватило на тиждень, але зараз вже побив свій рекорд :D.
Yaroslav Tkachyk
Рівень 23
Expert
6 березня 2023, 15:02
Я взяв підписку в листопаді 2022. В лютому 2023 вже був на 20 рівні. Займався по 3-4 години щодня. Старався за тиждень взяти 2 рівні, якщо були складні - то 1. Дуже багато підключав додаткових джерел... так би мовити щоб отримати подання одного й того ж матеріалу - різними словами. Багато допомогли статті з JR. Наразі взяв паузу, оскільки займаюсь додатково онлайн по Java. Планую під кінець місяця відновити попередню активність.
Kolapsec Далекобійник - Маркетолог
23 листопада 2023, 15:44
Як Ваші успіхи на даний час?
Alexander Safronyuk
Рівень 5
8 серпня 2024, 11:45
А ваші як? Також цікаво.
SoFar Away
Рівень 7
20 вересня 2022, 20:54
Розв'язок : Scanner scan = new Scanner(System.in); int age = scan.nextInt(); boolean young = (age > 20 || age <= 60); boolean old = (age < 20 || age > 60); if (old) System.out.println("можна не працювати");
Oleksii Klym
Рівень 11
2 жовтня 2022, 00:25
можна просто закоментувати два рядка boolean і написати один рядок ось такий if (age < 20 || age > 60) P.S. але дякую за розвязок тому що побачив у себе помилку🤭
Roma Chernesh
Рівень 16
15 листопада 2022, 17:48
хей) не треба спойлерів!
Val
Рівень 30
5 вересня 2022, 14:04
☺️
Roman
Рівень 13
24 серпня 2022, 07:49
/* Comment has been deleted */
Demon Zador
Рівень 36
20 вересня 2022, 14:49
Відомо, що точка не лежить на координатних осях OX і OY. З умови
Oleksii Klym
Рівень 11
2 жовтня 2022, 00:39
якби ти описав що четверта четверть це x>0 i y<0 то при введені нулі тобі б ніякого результато не вивело. а так тобі при будь якому числі в кінці цикла повинно вивести 4-ту четверть.........
Edward
Рівень 11
29 червня 2022, 16:59
Круто😀