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

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

Java Syntax Zero
Рівень 3 , Лекція 6
Відкрита

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


Коментарі (24)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
hidden #3500645 Рівень 30
4 жовтня 2024
Трошки голова зламалася на останніх двох корисних виразах !(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
У першій задачі вперше показано атрибут класа:

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 Рівень 10
31 липня 2024
попередження для тих, хто працює з мобільного, будьте уважні коли користуєтеся автовведеням, може вставляти ХЗ куди. приклад: програмка на дві з половиною строчки, а воно мені пише: помилка компіляції в стрічці 53! ледь розібралася. виявилося воно встромило вивод даних аж в 53 строку, якої по ідеї в програмі навіть існувати не повино... ПС. до одмінів ресурсу: це зальот хлопці. тра розібразися з глюком.
Дмитро Рівень 4 Expert
10 травня 2024
я зовсім нічого не розумію
Pavlo Рівень 8
10 травня 2024
все буде добре)
Roman Рівень 13
17 січня 2023
в чому різниця між & і &&? код компілюється в обох випадках
Denys Рівень 7
23 лютого 2023
При & завжди проводиться перевірка умов з 2-х боків від оператора При && проводиться з лівої сторони завжди, а за правої тільки якщо ліва відповідає умові. && використовується у 99% випадків для економії ресурсів, але інколи є специфічні випадки коли потрібно використовувати &
Vitalii Рівень 11
27 липня 2023
& це булева математика. Воно не повертатиме true чи false. воно повертатиме число)
Yaroslav Tkachyk Рівень 23 Expert
1 грудня 2022
Не зовсім зрозумів останні корисні вирази: !(a && b) - результат !а || !b !(a || b) - результат !а && !b Поясніть будь ласка для новачка.
Yaroslav Tkachyk Рівень 23 Expert
1 грудня 2022
Розібрався мабуть :) Наприклад: a - true b - true Тоді зліва: (a && b) - також true !(a && b) - false Тоді справа: !a - false !b - false (!a || !b) - також false
Ledzen Рівень 4
26 лютого 2023
Привіт, як я бачу ви з цього рівня за рік дійшли до 20го, розкажіть як багато на день займаєтесь?) Можливо є якісь цікаві хаки як не закинути програмування мені дуже цікаво) я 2гий раз сів навчатись перший раз мене хватило на тиждень, але зараз вже побив свій рекорд :D.
Yaroslav Tkachyk Рівень 23 Expert
6 березня 2023
Я взяв підписку в листопаді 2022. В лютому 2023 вже був на 20 рівні. Займався по 3-4 години щодня. Старався за тиждень взяти 2 рівні, якщо були складні - то 1. Дуже багато підключав додаткових джерел... так би мовити щоб отримати подання одного й того ж матеріалу - різними словами. Багато допомогли статті з JR. Наразі взяв паузу, оскільки займаюсь додатково онлайн по Java. Планую під кінець місяця відновити попередню активність.
Kolapsec Рівень 7
23 листопада 2023
Як Ваші успіхи на даний час?
Alexander Safronyuk Рівень 5
8 серпня 2024
А ваші як? Також цікаво.
SoFar Away Рівень 7
20 вересня 2022
Розв'язок : 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
можна просто закоментувати два рядка boolean і написати один рядок ось такий if (age < 20 || age > 60) P.S. але дякую за розвязок тому що побачив у себе помилку🤭
Roma Chernesh Рівень 16
15 листопада 2022
хей) не треба спойлерів!
Val Рівень 30
5 вересня 2022
☺️
Roman Рівень 13
24 серпня 2022
/* Comment has been deleted */
Demon Zador Рівень 36
20 вересня 2022
Відомо, що точка не лежить на координатних осях OX і OY. З умови
Oleksii Klym Рівень 11
2 жовтня 2022
якби ти описав що четверта четверть це x>0 i y<0 то при введені нулі тобі б ніякого результато не вивело. а так тобі при будь якому числі в кінці цикла повинно вивести 4-ту четверть.........
Edward Рівень 11
29 червня 2022
Круто😀