Transcript if / else
if/else statements
1
Conditionals
“If you eat your vegetables, then you can
have dessert.”
“If you do your homework, then you may
go outside to play, or else you’ll be
grounded for life.”
2
The if statement
if statement: A control structure that executes a block of
statements only if a certain condition is true.
General syntax:
if (<test>) {
<statement(s)> ;
}
Example (with grade inflation):
if (gpa >= 2.0) {
System.out.println("You get an A!");
}
3
if statement flow chart
4
The if/else statement
if/else statement: A control structure that executes one block of
statements if a certain condition is true, and a second block of
statements if it is false. We refer to each block as a branch.
General syntax:
if (<test>) {
<statement(s)> ;
} else {
<statement(s)> ;
}
Example:
if (gpa >= 3.0) {
System.out.println("Welcome to Temple!");
} else {
System.out.println("Try applying to Penn.");
}
5
if/else statement flow chart
6
if/else: Exercise
Write code to read a number from the user and print
whether it is even or odd using an if/else statement.
Example executions:
Type a number: 42
Your number is even
Type a number: 17
Your number is odd
7
Chained if/else statements
Chained if/else statement: A chain of if/else that can select
between many different outcomes based on several tests.
General syntax:
if (<test>) {
<statement(s)> ;
} else if (<test>) {
<statement(s)> ;
} else {
<statement(s)> ;
}
Example:
if (number > 0) {
System.out.println("Positive");
} else if (number < 0) {
System.out.println("Negative");
} else {
System.out.println("Zero");
}
8
Chained if/else variations
A chained if/else can end with an if or an else.
If it ends with else, one of the branches must be taken.
If it ends with if, the program might not execute any branch.
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else {
<statement(s)>;
}
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
}
9
Chained if/else flow chart
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else {
<statement(s)>;
}
10
Chained if/else if flow chart
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
}
11
Chained if/else variations
if (place == 1) {
System.out.println("You win the gold medal!");
} else if (place == 2) {
System.out.println("You win a silver medal!");
} else if (place == 3) {
System.out.println("You earned a bronze medal.");
}
Are there any cases where this code will not print a
message?
How could we modify it to print a message to nonmedalists?
12
Sequential if flow chart
if (<test>) {
<statement(s)>;
}
if (<test>) {
<statement(s)>;
}
if (<test>) {
<statement(s)>;
}
13
Summary: if/else structures
Choose exactly 1 set of statements
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else {
<statement(s)>;
}
Choose 0, 1, or more set of statements
if (<test>) {
<statement(s)>;
}
if (<test>) {
<statement(s)>;
}
if (<test>) {
<statement(s)>;
}
Choose 0 or 1 set of statements
if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
} else if (<test>) {
<statement(s)>;
}
14
Which if/else construct to use?
Reading the user's GPA and printing whether the student is on
the dean's list (3.8 to 4.0) or honor roll (3.5 to 3.8)
if / else if
Printing whether a number is even or odd
if / else
Printing whether a user is lower-class, middle-class, or upperclass based on their income
if / else if / else
Determining whether a number is divisible by 2, 3, and/or 5
if / if / if
Printing a user's grade of A, B, C, D, or F based on their
percentage in the course
if / else if / else if / else if / else
15
Boolean Arithmetic
16
Recall: Java's Primitive Data Types
Discrete Types
byte
short
int
long
Continuous Types
float
double
Non-numeric Types
boolean
char
17
The boolean Type
The boolean type has two possible values:
true and false
boolean variables are declared and initialized
just like other primitive data types:
boolean iAmSoSmrt = false;
//just like int i = 2;
boolean minor = (age < 21);
//just like int x = y*2;
18
Relational expressions
Relational expressions have
numeric arguments and
boolean values.
They use one of the following six relational operators:
Operator
Meaning
Example
Value
==
equals
1 + 1 == 2
true
!=
does not equal
3.2 != 2.5
true
<
less than
10 < 5
false
>
greater than
10 > 5
true
<=
less than or equal to
126 <= 100
false
>=
greater than or equal to
5.0 >= 5.0
true
19
Evaluating Relational expressions
Relational operators have lower precedence than math
operators.
5 * 7
5 * 7
35
35
true
>=
>=
>=
>=
3 + 5 * (7 - 1)
3 + 5 * 6
3 + 30
33
Relational operators cannot be chained (unlike math
operators)
2 <= x <= 10
true
<= 10
error!
20
Logical operators
Logical operators have
boolean arguments and
boolean values
Operator
&&
Description
and
Example
(9 != 6) && (2 < 3)
||
or
(2 == 3) || (-1 < 5)
!
not
!(7 > 0)
Result
true
21
Boolean expressions
What is the result of each of the following expressions?
int x = 42;
int y = 17;
int z = 25;
y < x && y <= z
x % 2 == y % 2 || x % 2 == z % 2
x <= y + z && x >= y + z
!(x < y && x < z)
(x + y) % 2 == 0 || !((z - y) % 2 == 0)
Answers: true, false, true, true, false
22
Subtleties of if/else
23
Scope
scope: The portion of a program where a given variable exists.
A variable's scope is from its declaration to the end of the { }
braces in which it was declared.
public class ScopeExample {
public static void main(String[] args) {
int x = 3;
int y = 7;
if(x > 0 && y > 0) {
int sumPositives = x + y;
} else {
sumPositives = 0; // illegal: sumPositives is out of scope
}
// illegal: sumPositives is out of scope
System.out.println("sum = " + sumPositives);
}
Why not just have the scope of a variable be the whole program?
24
Variable initialization
String message;
if (gpa >= 3.0) {
message = "Welcome to Temple!";
}
if (gpa >= 2.0) {
message = "Have you considered applying to Penn?";
}
if (gpa < 2.0) {
message = "I hear Harvard still needs students...";
}
System.out.println(message);
The compiler will complain that "variable message might not
have been initialized". Why?
25
Variable initialization
The solution:
String message;
if (gpa >= 3.0) {
message = "Welcome to Temple!";
} else if (gpa >= 2.0) {
message = "Have you considered applying to Penn?";
} else { // gpa < 2.0
message = "I hear Harvard still needs students...";
}
System.out.println(message);
26
Putting it all together: Exercises
Write a program named NumUnique that reads two
integers from the user and displays how many unique
values were passed.
For example, if the user enters 3 and 7, NumUnique displays 2
because 3 and 7 are two unique numbers, but if the user enters 4
and 4, it displays 1 because 4 and 4 only represent one unique
number.
Write a program named DividesEvenly that reads two
integers from the user and displays “true” if the first
evenly divides the second, and false otherwise.
For example, if the user enters 7 and 28, DividesEvenly
displays true because 7 is a factor of 28.
27
Magic Numbers
Magic numbers are BAD NEWS.
They are numeric constants other than 0, 1,
and 2 that appear in the body of a program.
Magic Number Example
public class Magic {
public static void main(String [] args) {
for(int i=0; i<10; i++) {
Magic
if(i % 3 ==0) { Magic
System.out.println(“Divisible by 3”);
}
}
}
}
Class Constants
A class constant is a variable
whose scope is the entire class, and
whose value can never change after it has
been initialized.
To give it the right scope, simply declare it right
inside the class:
public class MyClass {
public static final int myConstant = 4;
}
The final keyword means its value can’t be changed.
Magic Number Example:
with Class Constants
public class Magic {
public static final int upperBound = 10;
public static final int divisor = 3;
public static void main(String [] args) {
for(int i=0; i<upperBound; i++) {
if(i % divisor ==0) {
System.out.println(“Divisible by ” +
divisor);
}
}
}
}
Factoring if/else
32
Factoring if/else
factoring: extracting common/redundant code
Factoring if/else code reduces the size of the if and else
statements
Factoring tips:
If the start of each branch is the same, move it before the if/else.
If the end of each branch is the same, move it after the if/else.
33
Factoring: Before
if (money < 500) {
System.out.println("You have, $" + money + " left.");
System.out.print("Caution! Bet carefully.");
System.out.print("How much do you want to bet? ");
bet = console.nextInt();
} else if (money < 1000) {
System.out.println("You have, $" + money + " left.");
System.out.print("Consider betting moderately.");
System.out.print("How much do you want to bet? ");
bet = console.nextInt();
} else {
System.out.println("You have, $" + money + " left.");
System.out.print("You may bet liberally.");
System.out.print("How much do you want to bet? ");
bet = console.nextInt();
}
34
Factoring: After
System.out.println("You have, $" + money + " left.");
if (money < 500) {
System.out.print("Caution! Bet carefully.");
} else if (money < 1000) {
System.out.print("Consider betting moderately.");
} else {
System.out.print("You may bet liberally.");
}
System.out.print("How much do you want to bet? ");
bet = console.nextInt();
35