0% found this document useful (0 votes)
47 views

2022 CSCI1130-Tutorial03 Boolean and Operators

This document discusses Boolean and relational operators in Java. It introduces Boolean data types that can have true or false values. Relational operators like ==, !=, >, <, >=, <= are used to compare values and return a Boolean result. Logical operators like &&, ||, and ! are used to combine Boolean expressions and control program flow. Truth tables are used to show the output of logical operators for all combinations of true and false inputs. Examples demonstrate how to use relational and logical operators to write conditional statements.

Uploaded by

Tszkin Wong
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views

2022 CSCI1130-Tutorial03 Boolean and Operators

This document discusses Boolean and relational operators in Java. It introduces Boolean data types that can have true or false values. Relational operators like ==, !=, >, <, >=, <= are used to compare values and return a Boolean result. Logical operators like &&, ||, and ! are used to combine Boolean expressions and control program flow. Truth tables are used to show the output of logical operators for all combinations of true and false inputs. Examples demonstrate how to use relational and logical operators to write conditional statements.

Uploaded by

Tszkin Wong
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 44

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

You might also like