Introduction to Computing
Using Java
Primitive Data Type Boolean and
Related Operators
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 1
Boolean/Truth/Logic Processing
布林 ( 布爾 )/ 真值 / 邏輯運算
A proposition may be true, false or undetermined,
e.g.
– true/false questions in examinations
– You are a boy
– Peter is 21 years old
– Principal of no less than HK$30,000
– It will rain tomorrow?
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 2
Boolean Values
int moneyAtHand = 3000;
boolean noMoneyAtHand = false;
accountMichael.deposit(3000);
moneyAtHand = moneyAtHand - 3000;
noMoneyAtHand = true;
noMoneyAtHand = moneyAtHand <= 0;
moneyAtHand <=0 gives a True value
The only values a boolean type field can take is either true
or false.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 3
Expressions
• Up to now we have seen
• arithmetic expressions that use the operators
+ - * / % ++ --
• assignment expressions that use the operators
= += -= …
• Boolean expressions use relational and logical
operators.
• The result of a Boolean expression is either true
or false.
• Boolean expressions allow us to write programs
that decide whether to execute some code or not.
• These decisions changes the flow of the program
execution.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 4
Relational Operators
• Relational operators compare two arithmetic expressions
and evaluate to a boolean result.
== LHS is equal to RHS (double equal signs)
!= LHS is not equal to RHS
> LHS is greater than RHS
This is
NOT a < LHS is less than RHS
relational >= LHS is greater than or equal to RHS
operator!
<= LHS is less than or equal to RHS
= Assignment Operator! LHS is a storage/
3 Boolean & Relvariable!
Op CSCI1130, CS&E, The Chinese University of HK 5
The last Java program in the world
boolean buttonPressed = false;
...
if (buttonPressed = true) {
nuclear.launch();
}
What’s the problem?
Solution 1: Use (buttonPressed == true)
Solution 2: Use (buttonPressed)
Difference between ASSIGNMENT and JUDGE
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 6
Relational Operators
How do they look like?
– For numerics:
3 > 7
–1 != 1
oldWeight + oldHeight >= 190.34 * newHeight
18 = = Age
– For characters: (Depending on the ASCII value)
'Z' > 'A'
'A' > '0' ??? true ??? 65 > 48
'a' > 'A' ??? true ??? 97 > 65
Result must be true or false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 7
Relational operators
• These relational operators have lower
precedence than the arithmetic operators.
• Thus, arithmetic expressions are evaluated first,
then the Boolean expressions (higher precedence
evaluated first)
• That is, Java does the “math” first, then the
comparison.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 8
Relational operators
Examples:
int x = 15;
int y = 100;
System.out.println(x > y);
< 15);
System.out.println(x <= 15)
"Negate" y first,
== y);
then multiplication
System.out.println(x != 5);
* -y > 0);
System.out.println(x > y;
System.out.println(x
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 9
System.out.println(x
Floating point comparison
true or false? (inexact floating-point operation result)
– 0.5 * 0.5 == 0.25
– 0.7 * 0.7 == 0.49
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 10
Floating point comparison
true or false? (inexact floating-point comparison)
– 0.5 * 0.5 == 0.25 true
– 0.7 * 0.7 == 0.49 ??? false ???
Why false?
– Numerical error
How to compare floating point?
– Math.abs(f1-f2) < threshold (e.g. 0.0000001)
– Threshold: a very small value
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 11
Logical operators
• Logical operators combine boolean
values and evaluate to a boolean result.
Operator Name Example Result
true if a is false,
! Logical NOT !a
false if a is true
true if both a and b
&& Logical AND a && b are true, false
otherwise
true if a or b, or both
|| Logical OR a || b are true, false
otherwise
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 12
Boolean Expression
boolean iAmDry;
/*
* sunnyDay and noSweat iAmDry
*/
iAmDry = sunnyDay && noSweat;
--- 8< ---------------------------
What if it’s NOT sunny? [iAmDry false]
What if I DO sweat? [iAmDry false]
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 13
Logical AND
iAmDry noSweat
and (&&) true false
sunnyDay true true false
false false false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 14
Logical OR
phoneRing callComing
or (||) true false
SMSalert true true true
false true false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 15
Other Boolean Operators
The not (!) operator gives you the negation.
iAmCareless = !iAmCareful;
The xor (^) exclusive-or operator results false
when both operand values are equal;
xor results true if the operand values are unequal.
normalDay = workingDay ^ HOLIDAY;
true <- false ^ true
true <- true ^ false
false <- false ^ false
false <- true ^ true
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 16
Truth Tables
• Truth tables list all possible combination of
values for the variables in an expression.
a b a && b a || b !a a ^ b
true true true true false false
true false false true false true
false true false true true true
false false false false true false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 17
Logical Operators
Example:
(age > 26) &&
age > 26 hasLicense
hasLicense
boolean canRentCar = (age > 26) && hasLicense;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 18
Logical Operators
Example:
age > 26 hasLicense (age > 26) && hasLicense
true true true
true false false
false true false
false false false
int age = 16;
boolean hasLicense = true;
boolean canRentCar = (age > 26) && hasLicense;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 19
Logical Operators: Exercise 1
• It is time to buy a new phone when at least
one of the following situations occurs:
• your current phone is broken
• your current phone is at least 3 years old
int phoneAge; // in years
boolean isBroken;
… // code initializes variables
boolean needPhone =
;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 20
Logical Operators: Exercise 1
• It is time to buy a new phone when at least
one of the following situations occurs:
• your current phone is broken
• your current phone is at least 3 years old
int phoneAge; // in years
boolean isBroken;
isBroken = false; // code initializes variables
phoneAge = 2;
boolean needPhone = (isBroken == true) || (phoneAge >= 3);
boolean needPhone = isBroken || (phoneAge >= 3);
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 21
Logical Operators: Exercise 2
• Assume x, y, and z are int variables that
have been initialized.
boolean areAllEqual = ;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 22
Logical Operators: Exercise 2
• Assume x, y, and z are int variables that have been
initialized.
boolean areAllEqual = (x == y) && (y == z);
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 23
Logical Operators
Examples:
int x = 15; && is evaluated after relational
operators.
int y = 100; || is evaluated after &&.
System.out.println(x > y && x >= 15);
System.out.println(x < 15 || x > 15);
System.out.println(x == y && y == 100);
System.out.println(x != 5 && x < y);
System.out.println(x + y > 100 || y <= 10);
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 24
Bitwise AND (&)
iAmDry noSweat
and (&) true false
true true false
sunnyDay false false false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 25
Bitwise OR ( | )
phoneRing callComing
or ( | ) true false
SMSalert true true true
false true false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 26
Logical AND (&&)
(with short-circuit evaluation)
iAmDry noSweat
and (&&) true false
true true false
sunnyDay false false false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 27
Logical OR ( || )
(with short-circuit evaluation)
phoneRing callComing
or ( || ) true false
SMSalert true true true
false true false
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 28
Short-Circuit Logical Operation
( && | | )
iAmDry = sunnyDay && noSweat
If sunnyDay is false, Java will not check the truth value
of noSweat as the result must be false.
phoneRing = SMSalert || callComing;
If SMSalert is true, Java will not check the truth value of
callComing as the result must be true.
This is called short-circuit boolean evaluation.
(cut-corner!)
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 29
Boolean Algebra
• Double negation: !!a a
• de Morgan’s Law:
!(a && b) !a || !b
!(a || b) !a && !b
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 30
Complex Boolean Expression
iAmDry = sunnyDay && noSweat;
phoneSilent = lowBattery && callForwarded;
badMood = !(iAmDry && phoneSilent);
/* by De Morgan’s Law: && || */
badMood = !iAmDry || !phoneSilent;
/* in expanded form: */
badMood = ! (sunnyDay && noSweat) ||
! (lowBattery && callForwarded);
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 31
de Morgan’s Law (version 1)
Truth table: Consider all possible combinations of
values of boolean a and b.
!(a && b) is equivalent to (!a || !b)
a b a && b !(a && b) !a !b !a || !b
T T
T F
F T
F F
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 33
de Morgan’s Law (version 1)
Truth table: Consider all possible combinations of
values of boolean a and b.
!(a && b) is equivalent to (!a || !b)
identical
a b a && b !(a && b) !a !b !a || !b
T T T F F F F
T F F T F T T
F T F T T F T
F F F T T T T
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 33
de Morgan’s Law (version 2)
Truth table: Consider all possible combinations of
values of boolean a and b.
!(a || b) is equivalent to (!a && !b)
a b a || b !(a || b) !a !b !a && !b
T T
T F
F T
F F
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 33
de Morgan’s Law (version 2)
Truth table: Consider all possible combinations of
values of boolean a and b.
!(a || b) is equivalent to (!a && !b)
identical
a b a || b !(a || b) !a !b !a && !b
T T T F F F F
T F T F F T F
F T T F T F F
F F F T T T T
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 33
de Morgan’s Law
In Java:
!((age < 12) || (age >= 65))
In English: It is not the case that age less than 12 or
age greater than or equal to 65. !!!?
Simplify using de Morgan’s Law:
!(age < 12) && !(age >= 65)
Then reverse the meaning of the relational expressions:
(age >= 12) && (age < 65)
That is, when age is at least 12 and less than 65.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 36
de Morgan’s Law
In English:
Words neither rhyme nor alliterate.
In Java:
!wordsRhyme ___ && !
wordsAlliterate
Words don’t rhyme and they don’t alliterate
Apply de Morgan’s Law:
!(wordsRhyme || wordsAlliterate)
It’s not the case words rhyme or alliterate.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 37
Precedence
() Parentheses [highest]
< > == Relational/ Comparisons
! Negation
& Bitwise AND
^ Bitwise XOR
| Bitwise OR
&& Logical AND
|| Logical OR [lowest]
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 38
More About Expression
Assignment is also an expression!
USdollar = (HKdollar = 123.45) * rate;
[double = double * double]
Left to right evaluation
1 – 2 – 3 = (1 – 2) – 3 1 – (2 – 3)
Short forms for number types
Age = Age + 1; Age++;
Age = Age - 1; Age--;
Short forms for number types
Age = Age + 15; Age += 15;
USdollar = USdollar – 1.7; USdollar -= 1.7;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 39
Mixing Numeric and Boolean
Expressions
int temperature = 38;
boolean goHome = (temperature > 40) | (temperature < 0);
System.out.println("goHome? " + goHome);
int diceOne = 5, diceTwo = 6, diceThree = 6;
boolean triple = (diceOne == diceTwo) &
(diceTwo == diceThree);
boolean small = (diceOne + diceTwo + diceThree <= 10) &
! triple;
boolean big = (diceOne + diceTwo + diceThree >= 11) &
! triple;
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 40
Prime Number Checker
Get an integer input from user through console (use
Scanner), then check that whether this input number is
a prime number or not?
boolean isPrime = true;
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int temp = 0;
Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 41
Prime Number Checker
isPrime = true;
int factorInTrial = (int) Math.sqrt(num);
while (factorInTrial >= 2)
{
// divisibility test with different factors
remainder = num % factorInTrial;
if (remainder == 0)
System.out.println("Found factor of " + num + ": " + factorInTrial);
isPrime = isPrime && (remainder != 0); // isPrime &&= remainder != 0;
factorInTrial--;
}
System.out.println("Input number " + num + " is prime? " + isPrime);
Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 42
Exercise: MPF Contribution
https://www.mpfa.org.hk/en/mpf-system/mandatory-contr
ibutions/employees#anchor1
Write a Java program to calculate the monthly mandatory
contribution of an employee, given input the relevant
monthly salary.
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 43
Introduction—MPF
Mandatory Provident Fund ( 強積金制度 )
Relevant month salary Monthly mandatory
contribution (employee)
Lower than $7,100 No contribution is required
$7,100 to $30,000 (inclusive) Relevant salary x 5%
Larger than $30,000 $1,500
3 Boolean & Rel Op CSCI1130, CS&E, The Chinese University of HK 44