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