Welcome to Lesson 10!
Learning Objectives By the end of today's class, you should know... - How do you test multiple conditions using logical operators?
- How do && and || operate when:
- both test conditions evaluate to true?
- both test conditions evaluate to false?
- one test condition evaluates to true and one to false?
- What are some pitfalls you might encounter when using logical operators and how can you avoid them
Announcements - Midterm after a short lesson and the break
- No Lab this Friday due to Presidents' Day Holiday
- Assignment 9 due Thursday - don't forget!
- Come to De Anza Women in CS Club meeting tomorrow at 12:30 in the ATC 203 computer lab!
Logical Operators- In certain situations, we may wish to use more than one test condition inside of an if statement.
- To do so, we will need to chain the test conditions together using logical operators (either && or ||)
- For example, recall our guessing game program:
System.out.println("I'm thinking of a number between 1 and 10."); System.out.println("Can you guess it?\n"); System.out.print("Enter your guess: "); guess = input.nextInt(); if (guess < 1 || guess > 10) { //if guess is < 1 OR guess > 10 System.out.println("Invalid entry!"); } else if (guess < 7) { System.out.println("Your guess is too low"); } else if (guess > 7) { System.out.println("Your guess is too high"); } else { System.out.println("*** Correct! ***"); }Review of Boolean Variables
Test Conditions and Boolean Values- Remember that test conditions always evaluate to
true or false if (num > 0)
- Thus we can use a boolean variable as a test condition
boolean isPositive = (num >= 0);
if (isPositive)
- Note that we do not need to add a relational expression to a boolean variable, like:
if (isPositive == true) // avoid! - Since the boolean variable already evaluates to
true or false , adding the == true is redundant - Likewise, we do not need to use:
if (isPositive != false) // avoid! - If we want to reverse the test condition, we can use the not (
! ) operatorif (!isPositive) - We can see the use of a Boolean variable in the following example
Example Application Using a Boolean Variable1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| public static void main(String[] args)
{
int num; Scanner input = new Scanner(System.in); System.out.print("Enter a number: ");
num = input.nextInt();
boolean isPositive = (num >= 0);
System.out.println("The test evaluated to: " + isPositive);
if (isPositive) {
System.out.println("The number was 0 or positive");
} else {
System.out.println("The number was negative");
}
}
|
Introducing &&, || and !
Logical operators and search engines video
Combining Test Conditions with Logical Operators- A logical operator, or Boolean operator, is an operator that treats operands as Boolean values (
true or false ) - Java has several logical operators, but we only need to use three to create any possible test condition
- These three operators are
and , or and not , which are discussed below - These logical operators are traditionally written as
&& (and ), || (or ) and ! (not )
Truth Tables for AND, OR and NOT
&& (AND ) Operator Truth Tableexpr1
| expr2
| expr1 && expr2
| Example | Result |
---|
true | true | true | 5 < 10 && 5 > 2 | true | true | false | false | 5 < 10 && 5 < 2 | false | false | true | false | 5 > 10 && 5 > 2 | false | false | false | false | 5 > 10 && 5 < 2 | false |
|| (OR ) Operator Truth Tableexpr1
| expr2
| expr1 || expr2
| Example | Result |
---|
true | true | true | 5 < 10 || 5 > 2 | true | true | false | true | 5 < 10 || 5 < 2 | true | false | true | true | 5 > 10 || 5 > 2 | true | false | false | false | 5 > 10 || 5 < 2 | false |
not (! ) Operator Truth TableIf expr is... | Then ! expr is... | Example | Result |
---|
true | false | !true | false | false | true | !(5 < 2) | true |
Testing Multiple Conditions Using Logical Operators
- Sometimes we need to test for multiple conditions using a single if statement
- In this case, we will need to chain together the two conditions using a logical operator, either && or ||
- Note that one either side of the logical operator there must be a stand alone test condition that resolves to true or false
if (age >= 18 && age <= 25) //Correct!!!
if (age >= 18 && <= 25) //No! Incorrect!!
- For example, we want to test if an age is between 18 and 65
- We need to test that both parts of are true: is the age >= 18 AND is the age <= 65
int age = 0; System.out.print("Enter your age: "); age = input.nextInt(); if (age >= 18 && age <= 65) { System.out.println("Adult!"); } else { System.out.println("Child, Teen or Older Adult!"); }
Parenthesis
Activity 10.1: What's Your Generation? (10 pts)
- There are 6 generations living in America, side-by-side, today.
- Your program will determine to which generation a user belongs.
- Find a partner for pair programming, then open up a new project and name it Generation.
- You will need to take as input the year of his or her birth.
- Then, you will need a series of test conditions (think if - else if - else) to determine the generation of your user.
- You will also need to use logical operators (&&, ||, !).
- Below is a chart with the range of birth years for each generation.
- Note the double quotes around each generation's name. For full credit, you must include the " when you output the generation.
Years of Birth Generation
1900-1927 "The Greatest Generation"
1928-1945 "The Silents"
1946-1964 "The Baby Boomers"
1965-1979 "Generation X"
1980-1999 "The Millennial Generation"
2000-2018 "Generation Z"
- Your
goal is to prompt the user for his or her year of birth and then print
out a message about which generation he or she belongs to.
- To start, print the following message to the user:
What's your generation?- Then, you will need a variable to store the user's year of birth:
int year_of_birth;
- Next, prompt your user to enter his or her year of birth with a statement like the following:
Please enter the year of your birth: _
- Subsequently, you will need 6 if and if else statements like the following:
if ( year_of_birth >= 1900 && year_of_birth < 1928) { System.out.println("You belong to the \"Greatest Generation\""); } else if ( year_of_birth >= 1928 && year_of_birth < 1946) { System.out.println("You belong to the \"The Silents\""); }
//rest of your else ifs and your else clause go here
- Important: Why are we using && here and not ||?
- Finally, you will need to do some error checking of the user input.
- If the user inputs a date that is either too high or too low, your program must print out the following message:
Invalid entry. Please enter a birth year in the range 1900 - 2018.
- The above should go in your else clause
- Make sure your output is identical to the sample output below before you submit.
- When you are finished, upload Generation.java to Canvas
What's your generation? Please enter the year of your birth: 1926 You belong to the "Greatest Generation".
Alternately,
What's your generation? Please enter the year of your birth: 2020 Invalid entry! Please enter a birth year in the range 1900 - 2018.
More Information on Logical Operators
Midterm 1
- Assignment 9 due Thursday at 11:20am on Canvas
- No Lab This Friday
~See You Thursday!~ |