CodeGym /課程 /JAVA 25 SELF /布林(boolean)型別與邏輯運算

布林(boolean)型別與邏輯運算

JAVA 25 SELF
等級 3 , 課堂 3
開放

1. 布林資料型別:boolean

如前所見,Java 有個很實用的運算子——if-else。當括號中的條件為真時會執行第一個指令區塊,為假時則執行第二個指令區塊。

為了方便處理可能為真或為假的運算式,Java 提供了特殊型別——boolean。它的主要特點在於,此型別的變數只能取兩個值:true(真)與 false(假)。

無法將任何其他值賦給 boolean 型別的變數。編譯器不會允許。

boolean 型別變數的範例:

boolean isAdult = true;
boolean hasMoney = false;
宣告 boolean 型別變數的範例

boolean 變數只有兩個值——truefalse。就這樣!幾乎就像測試結果——不是「通過」,就是「失敗」。

2. 比較運算

那這麼原始的型別有什麼用呢?boolean 的真正威力在於我們構造邏輯運算式時。通常會用比較運算子來得到這些運算式。

運算子 用途 範例 結果
== 等於
a == b
truefalse
!= 不等於
a != b
truefalse
> 大於
a > b
truefalse
< 小於
a < b
truefalse
>= 大於或等於
a >= b
truefalse
<= 小於或等於
a <= b
truefalse

範例:

int age = 20;
boolean isAdult = age >= 18;   // true(20 大於或等於 18)
boolean isTeenager = age >= 13 && age < 18; // false(20 不小於 18)
boolean isEven = age % 2 == 0; // true(20 可被 2 整除,無餘數)

這裡 isAdult 會變成 true,因為 20 的確是「成年」年齡。

重點 1:

由兩個字元組成的運算子不能拆開。


a < = 10
speed > = max
age = = 18
time ! = 0
不能這樣寫!運算子必須連寫: <=>===!=

重點 2:

請注意,沒有 =>=< 這兩個運算子;只有 <=>=。如果你寫下 a =< 3,你的程式就不會通過編譯。

重點 3:

在 Java 中,你不能寫出像 18 < age < 65 這樣的運算式。因為 18 < age 的結果是 truefalse。而將 true 與數字(65)相比較是不允許的——型別不同。

3. 邏輯運算

在 Java 語言中,不能寫出 18 < age < 65 這樣的運算式——它在語法上不正確,程式也不會被編譯。

不過可以這樣寫:


(18 < age) I (age < 65)
具有兩個條件的邏輯運算式(俄語)

當然,我們實際上會使用邏輯運算子來代替文字。Java 提供三個邏輯運算子:AND(且)、OR(或)與 NOT(非)。

好消息:使用括號可以構造任意複雜的邏輯運算式。
壞消息:在 Java 中,不使用 andornot 這些單詞,而是使用 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))

4. 真值表

簡要回顧一下邏輯運算。

AND 運算子

AND 運算子,也就是 &&,亦稱為合取、邏輯乘法。

運算式 結果
true && true true
true && false false
false && true false
false && false false

OR 運算子

OR 運算子,也就是 ||,亦稱為析取、邏輯加法。

運算式 結果
true || true true
true || false true
false || true true
false || false false

NOT 運算子

NOT 運算子,也就是 !,亦稱為反相(否定)。

運算式 結果
! true false
! false true

有用的等價式:

運算式 結果
m && !m false
m || !m true
!(a && b) !a || !b
!(a || b) !a && !b

5. 邏輯運算範例:and、or、not

「且」運算(AND),以 && 表示

只有兩個條件都為真,結果才為真。

int age = 16;
boolean hasTicket = true;
boolean canAttend = age >= 14 && hasTicket; // true(16 大於 14 且有票)

如果你已滿 14 歲有票——請進!

「或」運算(OR),以(||)表示

只要至少一個條件為真,結果就為真。

boolean isAdmin = false;
boolean isModerator = true;
boolean canEdit = isAdmin || isModerator; // true(只要其中任一為 true,就可編輯)

如果你是管理員版主——請放心按按鈕!

「非」運算(NOT),以(!)表示

反相會把真變為假,反之亦然。

boolean isWeekend = false;
boolean shouldGoToWork = !isWeekend; // true(若非週末,就要上班)

如果不是週末——該起床了!

組合運用:建構任意複雜的條件

你可以任意組合多個邏輯運算(但別過度複雜化)。為了清楚起見,可以(而且應該)使用括號。

範例:

int age = 17;
boolean hasTicket = false;
boolean isVip = true;

boolean canGo = (age >= 18 && hasTicket) || isVip; // true,因為 isVip = true

邏輯:如果此人已成年且有票,或者他是 VIP——就放行。若不是 VIP——只有在已成年且有票時才放行。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION