“你好,阿米戈!我在解決邏輯問題時太過分了,沒注意到你進來了。這是給你的:如果鱷魚會飛,那麼雪就是白的。有一隻會飛的鱷魚。結論是什麼?”

“嗯……所以我們斷定雪是白色的?”

“太棒了!你通過了入門測試。你已經準備好掌握下一題了。它被稱為'邏輯運算符'。我們將從布爾邏輯開始。本能地,你已經知道了。畢竟你是一個機器人. 我們只需要調整您的設置以匹配 Java 語言。”

“布爾邏輯?我最近聽說了布爾類型……”

“是的,這裡有直接的聯繫。布爾表達式只能是真或假。碰巧,這種邏輯就是關於真或假的表達式,以及這些表達式的組合。例如,表達式 18 < 25 始終為真,7 < 5 始終為假。表達式 (i < 10) 取決於 i 的值。例如,如果表達式的計算結果為真,那麼我們可以要求程序執行某些操作。”

“啊,我明白了,布爾表達式不僅可以讓我們做出合乎邏輯的結論,還可以在程序中創建分叉。”

“完全正確。主要的事情是學習如何編寫它們。例如,在 Java 中,你不能直接去編寫表達式18 < age <65。這在語法上是不正確的,程序將無法編譯。

“但是你可以這樣寫:

(18 < age) AND (age < 65)

當然,我們實際上並不使用 ENGLISH 單詞AND。相反,您需要一個布爾運算符。也就是說,“AND”的表示方式不同。

“Java 中存在三種邏輯運算符:AND(&&)、OR(||)、NOT(!)。

消息是您可以使用括號來構造任何復雜的邏輯表達式。

消息是 Java 開發人員決定使用C 語言的表示法而不是and,ornot

看畫面:

邏輯運算符 期待 現實
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");
如果 age 的值介於18和之間65,則顯示短語“You can work”。
int age = 35;
boolean isYoung = (age < 18);
if (!isYoung && age <= 65)
   System.out.println("You can work");
我們創建了一個isYoung變量並將表達式的第一部分移入其中。我們只是age >= 18age < 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。”

“我會記住的。我希望。”

邏輯運算

“現在讓我們簡要介紹一下邏輯操作。它們遵循非常簡單和合乎邏輯的(否則怎麼可能!)規則。

“首先,讓我們看看OR運算符是如何工作的。它也稱為||or disjunction

表達 結果
true || true true
true || false true
false || true true
false || false false

a || b“你現在可以根據表格推斷出表達式的結果是什麼了嗎?”

“我懂了!” true如果表達式中至少有一項是 ,則表達式的值為true。如果兩者都是false,那麼結果是false

“是啊。既然你這麼聰明,再看一下表格,想像一下false0 和true1。這樣看的話,||運算符的行為是不是讓你想起了普通算術中的任何東西?”

“嗯……嗯,有點像加法……但是做加法的時候,1+1不等於1。”

“從某種意義上說,如果我們只處理 0 和 1,它是相等的。但現在不要為此煩惱。重要的是你注意到運算和加法之間的相似性。這意味著你不會||”這個操作通常被稱為“邏輯加法”,這一點請不要感到驚訝。

“知道了。”

“現在AND,又名&&,又名合取運算符,登上舞台。

表達 結果
true && true true
true && false false
false && true false
false && false false

true“據我了解,只有當構成表達式的兩個值都是 時,表達式的結果才是true。否則,它總是false。”

“幹得好,阿米戈!你像海綿一樣吸收了所有這些。你看到與算術的另一個相似之處了嗎?”

“乘法!”

“完全正確。所以這裡我們有一個‘邏輯乘法’”。

“接下來我們看看NOT運算符,也!就是邏輯逆運算

表達 結果
!true false
!false true

“好吧,這裡的一切都很簡單。接線員更改truefalse,反之亦然。”

“完全正確。這裡有一些對你有用的表達方式:”

表達 結果
m && !m false
m || !m true
!(a && b) !a || !b
!(a || b) !a && !b