"Поздрави, Амиго! Толкова се увлякох от решаването на логически задачи, че не забелязах, че влизаш. Ето една за теб: ако летят кроcodeor, значи снегът е бял. Има летящ кроcodeил. Какъв е изводът?"

— Хм... Значи заключаваме, че снегът е бял?

„Отлично! Издържахте началния тест. Готови сте да овладеете следващата тема. Нарича се „логически оператори“. И ще започнем с булева логика. Инстинктивно вече го знаете. В крайна сметка вие сте робот . Просто трябва да променим настройките ви, за да съответстват на езика Java."

„Булева логика? Наскоро ми казаха за булев тип...“

„Да, тук има пряка връзка. Булевите изрази могат да бъдат само истина or невярно. И Howто се случва, този вид логика се отнася изцяло за изрази, които са истина or невярно, и комбинации от такива изрази. Например изразът 18 < 25 винаги е вярно, а 7 < 5 винаги е невярно. Изразът (i < 10) зависи от стойността на i. И ако изразът се изчисли, например, като вярно, тогава можем да поискаме от програмата да направи нещо."

„Аха, разбирам. Булевите изрази ни позволяват не само да правим логически заключения, но и да създаваме разклонения в програмите.“

„Точно. Основното нещо е да се научите How да ги пишете. Например в Java не можете просто да отидете и да напишете израза 18 < age <65. Това би било синтактично неправилно и програмата няма да се компorра.

„Но можете да го напишете така:

(18 < age) AND (age < 65)

Разбира се, ние всъщност не използваме АНГЛИЙСКАТА дума AND. Вместо това се нуждаете от булев оператор . Тоест, „И“ е представено по различен начин.

„В Java има три логически оператора: AND(&&), OR(||), NOT(!).

Добрата новина е, че можете да използвате скоби , за да конструирате логически изрази с всяHowва сложност.

Лошата новина е, че разработчиците на Java решиха да използват нотация от езика C instead of andдумите orи not.

Погледнете екрана:

Логически оператор Очакване Реалност
AND (∧) and &&
OR (∨) or ||
NOT (¬) not !

„Всъщност не е толкова лошо... Доста компактно. Почти съм ги запомнил.“

„Е, това е чудесно. Ето няколко примера за използване на логически оператори в Java:

Изразяване Интерпретация Обяснение
(0 < a) && (a < 100) (0 < a) and (a < 100) (0 < a) AND (a < 100)
(!a) && (!b) (not a) and (not b) (NOT a) AND (NOT b)
!(!a || !b) not((not a) or (not b)) NOT((NOT a) OR (NOT b))

Примери за използване на оператори за сравнение и булеви променливи

„Запомни, Амиго, навсякъде, където можеш да напишеш логически израз, можеш да напишеш и логическа променлива.“

— Как е това?

„Имам предвид, че можете да пишете логически изрази по различни начини. Например:

Код Обяснение
int age = 35;
if (age >= 18 && age <= 65)
   System.out.println("You can work");
Ако стойността на възрастта е между 18и 65, тогава се показва фразата "Можете да работите".
int age = 35;
boolean isYoung = (age < 18);
if (!isYoung && age <= 65)
   System.out.println("You can work");
Създадохме isYoungпроменлива и преместихме първата част от израза в нея. Ние просто заменихме age >= 18с age < 18.
int age = 35;
boolean isYoung = (age < 18);
boolean isOld = (age > 65);
if (!isYoung && !isOld)
   System.out.println("You can work");
Създадохме променлива isOld и преместихме втората част от израза в нея. Освен това age <= 65беше заменен от age > 65.

„Тези три примера са еквивалентни. Само във втория пример преместихме част от израза от израза ifв отделна булева променлива ( isYoung). В третия пример преместихме втората част от израза във втора променлива ( isOld). Между другото, стойността по подразбиране на булева променлива е false.

— Ще го запомня. Надявам се.

Логическа аритметика

„А сега нека прегледаме накратко логическите операции. Те се подчиняват на много прости и логични (How иначе!) правила.

„Първо, нека видим How ORработи операторът. Известен е също като ||or дизюнкция .

Изразяване Резултат
true || true true
true || false true
false || true true
false || false false

"Можете ли да заключите сега Howъв е резултатът от израза a || bвъз основа на tableта?"

"Виждам!" Стойността на израз е true, ако поне един член в израза е true. Ако и двете са false, тогава резултатът е false.

„Това е правилно. След като си толкова умен, погледни отново tableта и си представете, че falseе 0 и trueе 1. Когато го погледнете по този начин, ||поведението на оператора напомня ли ви нещо от обикновената аритметика?“

„Ъм... Е, това е малко като събиране... Но когато правиш събиране, 1 + 1 не е равно на 1.“

„Има смисъл, в който е равно, ако работим само с 0 и 1. Но не се занимавайте с това точно сега. Важното е, че сте забелязали прorката между операцията и ||събирането. Това означава, че няма Не се изненадвайте от факта, че тази операция често се нарича „логическо добавяне“.

"Схванах го."

„Сега операторът AND, известен още като &&, известен още като конюнкция , излиза на сцената.

Изразяване Резултат
true && true true
true && false false
false && true false
false && false false

„Доколкото разбирам, резултатът от израз е trueсамо ако и двете стойности, съставляващи израза, са true. В противен случай винаги е false.“

"Браво, Амиго! Попиваш всичко това като гъба. Виждаш ли друга прorка с аритметиката?"

"Умножение!"

„Точно така. Така че тук имаме „логическо умножение“.

„След това разглеждаме NOTоператора, известен още !като логически обратен .

Изразяване Резултат
!true false
!false true

"Е, тук всичко е съвсем просто. Операторът се променя trueна falseи обратно."

"Точно така. Ето някои полезни изрази за вас:"

Изразяване Резултат
m && !m false
m || !m true
!(a && b) !a || !b
!(a || b) !a && !b