Boolean expressions, part 2: Logical operators Previously discussed • Recall that there are 2 types of operators that return a boolean result (true or false): • Compare operators: • A compare operator compares 2 numerical expressions and return a Boolean result. • Example: • the compare operation 3 > 1 returns the Boolean value true Previously discussed (cont.) • Logical operators: • A logical operator compares 2 Boolean (logical) expressions and return a Boolean result. •Example: • the logical operation true AND false returns the Boolean value false Logical operators • Logical operators in Java: Operator symbol Meaning Comment && The logical AND operator The logical OR operator The logical NOT operator Binary operator || ! Binary operator Unary operator The logical AND operator && • The && operator only operate on the Boolean values true and false • The results are as follows: Operation Result true && true true true && false false false && true false false && false false The logical AND operator && (cont.) • Example 1: (3 > 1) && (3 < 5) = true && true = true The logical AND operator && (cont.) • Example 2: (3 > 1) && (3 > 5) = true && false = false Example program: test if a number is between 10 and 20 • Problem description: • Write a Java program that reads in a number a • The program prints "yes" when 10 ≤ a ≤ 20 and "no" otherwise. Example program: test if a number is between 10 and 20 (cont.) • Wrong solution: if ( 10 <= a <= 20 ) System.out.println("yes"); else System.out.println(“no"); Example program: test if a number is between 10 and 20 (cont.) Because 10 <= a <= 20 is evaluated as follows: Expression: Operators: Evaluated as: 10 <= a <= 20 <= <= 10 <= a <= 20 (10 <= a is either true or false) true <= 20 or false <= 20 It is illegal to use the compare <= operator between a Boolean value and a number Example program: test if a number is between 10 and 20 (cont.) • Correct solution: if ( 10 <= a && a <= 20 ) System.out.println("yes"); else System.out.println(“no"); Because only numbers that are between 10 and 20 will satisfy the condition 10 <= a && a <= 20 Example program: test if a number is between 10 and 20 (cont.) • Java program: import java.util.Scanner; public class Between01 { public static void main(String[] args) { int a; Scanner in = new Scanner(System.in); // Construct Scanner object a = in.nextInt(); // Read in number into a if ( 10 <= a && a <= 20 ) { System.out.println("Number is between 10 and 20"); } else { System.out.println("Number is NOT between 10 and 20"); } } } Example program: test if a number is between 10 and 20 (cont.) • Example Program: (Demo above code) – Prog file: http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/ Between01.java • How to run the program: • Right click on link and save in a scratch directory • To compile: javac Between01.java • To run: java Between01 Priority of the logical operators • Priority ranking of the logical operators against the previously discussed operators: Priority level Operator(s) Description 1 () Brackets 2 (int) − ! Casting, negation, logical NOT Associativity Right to left 3 ++, -- Increment, decrement 4 * / % Multiple, divide, remainder Left to right 5 + - Add, subtract Left to right 6 < <= > >= == != Compare operators 7 && logical AND Left to right 8 || logical OR Left to right 9 = += -= ... Assignment operators Right to left Priority of the logical operators (cont.) • Reference: http://introcs.cs.princeton.edu/java/11precedence/ Priority of the logical operators (cont.) • Example 1: boolean a; Statement: a = 3 > 1 && 4 < 5 ; Operators in statement: = > && < Executed as follows: a = 3 > 1 && 4 > 5 ; // > and < have highest priority a = true && true ; a = true; Priority of the logical operators (cont.) • Example 2: boolean a; Statement: a = 3 > 1 && ! 4 < 5 Operators in statement: = > && ! < Executed as follows: a = 3 > 1 && ! 4 < 5 // ! has the highest priority Result: error Logical NOT operator (!) cannot be applied to a number Priority of the logical operators (cont.) • Example 3: boolean a; Statement: a = 3 > 1 && ! (4 < 5) Operators in statement: = > && ! ( < ) Executed as follows: a = 3 > 1 && ! (4 < 5); // ( ... ) has the highest priority a = 3 > 1 && ! true; // ! has the highest priority now a = 3 > 1 && false; // > has the highest priority now a = true && false; // && has the highest priority now a = false; Programming example: Leap year using a complicated Boolean expression • Leap year description (Wikipedia): • In the Gregorian calendar, the current standard calendar in most of the world, most years that are evenly divisible by 4 are leap years. • Years that are evenly divisible by 100 are not leap years, unless they are also evenly divisible by 400, in which case they are leap years Programming example: Leap year using a complicated Boolean expression (cont.) • Constructing the Boolean expression for "leap year": • most years that are evenly divisible by 4 are leap years: Year is leap year if: year % 4 == 0 (divisible by 4) Programming example: Leap year using a complicated Boolean expression (cont.) • Years that are evenly divisible by 100 are not leap years: Year is leap year if: (year % 4 == 0) && !(year % 100 == 0) divisible by 4 AND not divisible by 100 Programming example: Leap year using a complicated Boolean expression (cont.) • unless they are also evenly divisible by 400, in which case they are leap years Year is leap year if: (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0) Programming example: Leap year using a complicated Boolean expression (cont.) • Java program: import java.util.Scanner; public class LeapYear02 { public static void main(String[] args) { int year; boolean leap; Scanner in = new Scanner(System.in); // Construct Scanner object Programming example: Leap year using a complicated Boolean expression (cont.) System.out.print("Enter year:"); year = in.nextInt(); // Read in year if ( (year % 4 == 0) && !(year % 100 == 0) || (year % 400 == 0) ) { System.out.println("It is a leap year"); } else { System.out.println("It is NOT a leap year"); } } } Programming example: Leap year using a complicated Boolean expression (cont.) • Example Program: (Demo above code) – Prog file: http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/ LeapYear02.java • How to run the program: • Right click on link and save in a scratch directory • To compile: javac LeapYear02.java • To run: java LeapYear02