Java If Else
Java If Else
statement
2
Copyright 2008 by Pearson Education
The if statement
Executes a block of statements only if a test is true
if (test) {
statement;
...
statement;
}
Example:
double gpa = console.nextDouble();
if (gpa >= 3.0) {
System.out.println("Good job! Here’s a cookie.");
}
3
Copyright 2008 by Pearson Education
The if/else statement
Executes one block if a test is true, another if false
if (test) {
statement(s);
} else {
statement(s);
}
Example:
double gpa = console.nextDouble();
if (gpa >= 3.0) {
System.out.println("Good job! Here’s a cookie.");
} else {
System.out.println("No cookie for you!");
}
4
Copyright 2008 by Pearson Education
Relational expressions
if statements and for loops both use logical
tests.
for (int i = 1; i <= 10; i++) { ...
if (i <= 10) { ...
These are Boolean expressions.
Tests use 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
5
Copyright 2008 by Pearson Education
Misuse of if
What's wrong with the following code?
Scanner console = new Scanner(System.in);
System.out.print("What percentage did you earn?
"); int percent = console.nextInt();
if (percent >= 90) {
System.out.println("You got an A!");
}
if (percent >= 80) {
System.out.println("You got a B!");
}
if (percent >= 70) {
System.out.println("You got a C!");
}
if (percent >= 60) {
System.out.println("You got a D!");
}
if (percent < 60) {
System.out.println("You got an F!");
}
...
6
Copyright 2008 by Pearson Education
Nested if/else
Chooses between outcomes using many tests
if (test) {
statement(s);
} else if (test) {
statement(s);
} else {
statement(s);
}
Example:
if (x > 0) {
System.out.println("Positive");
} else if (x < 0) {
System.out.println("Negative");
} else {
System.out.println("Zero");
}
7
Copyright 2008 by Pearson Education
Nested if/else/if
If it ends with else, exactly one path must be taken.
If it ends with if, the code might not execute any path.
if (test) {
statement(s);
} else if (test) {
statement(s);
} else if (test) {
statement(s);
}
Example:
if (place == 1) {
System.out.println("Gold medal!");
} else if (place == 2) {
System.out.println("If you're not first, you're last!");
} else if (place == 3) {
System.out.println("What comes after last place?");
}
10
Copyright 2008 by Pearson Education
Summary: if structures
exactly 1 path (mutually exclusive) 0 or 1 (mutually exclusive)
path
if (test) { if (test) {
statement(s); statement(s);
} else if (test) { } else if (test) {
statement(s); statement(s);
} else { } else if (test) {
statement(s); statement(s);
} }
Whether you made the dean's list (GPA ≥ 3.8) or honor roll (3.5-3.8).
(3) nested if / else if
12
Copyright 2008 by Pearson Education
Nested if/else question
BMI Weight class
Formula for body mass index (BMI): below 18.5 underweight
18.5 - 24.9 normal
weight 25.0 - 29.9 overweight
BMI = height2
30.0 and up obese
703
Write a program that produces output like the following:
This program reads data for two people and
computes their body mass index (BMI).
Enter next person's information:
height (in inches)? 70.0
weight (in pounds)? 194.25
Enter next person's information:
height (in inches)? 62.5
weight (in pounds)? 130.5
Person 1 BMI =
27.868928571428572
overweight
Person 2 BMI = 23.485824
normal
Difference = 4.3831045714285715
13
Copyright 2008 by Pearson Education
Nested if/else answer
// This program computes two people's body mass index (BMI) and
// compares them. The code uses Scanner for input, and parameters/returns.
import java.util.*; // so that I can use Scanner
public class BMI {
public static void main(String[] args) {
introduction();
Scanner console = new
Scanner(System.in);
double bmi1 = person(console);
double bmi2 = person(console);
// report overall results
report(1, bmi1);
report(2, bmi2);
System.out.println("Differenc
e = " + Math.abs(bmi1 -
bmi2));
}
// prints a welcome message
explaining the program
public static void introduction()
{
System.out.println("This program reads data for two people and");
System.out.println("computes their body mass index (BMI).");
System.out.println();
} 14
Copyright
... 2008 by Pearson Education
Nested if/else, cont'd.
// reads information for one person, computes their BMI, and returns
it
public static double person(Scanner console)
{ System.out.println("Enter next person's
information:"); System.out.print("height (in inches)?
");
double height = console.nextDouble();
System.out.print("weight (in pounds)? ");
double weight = console.nextDouble();
System.out.println();
double bodyMass = bmi(height, weight);
return bodyMass;
}
// Computes/returns a person's BMI based
on their height and weight.
public static double bmi(double height, double weight)
{ return (weight * 703 / height / height);
}
// Outputs information about a person's BMI and weight
status.
public static void report(int number, double bmi)
{ System.out.println("Person " + number + " BMI = " +
bmi); if (bmi < 18.5) {
System.out.println("underweight");
} else if (bmi < 25)
{ System.out.println("normal"
);
} else if (bmi < 30) 15
} { System.out.println("overweight"
Copyright 2008 by Pearson Education
);
} else {
System.out.println("obese");
The if/else hammer
Just because you learned a new construct does not mean
that every new problem has to be solved using that
construct!
19
Copyright 2008 by Pearson Education
Nested if/else
Chooses between outcomes using many tests
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");
}
20
Copyright 2008 by Pearson Education
Nested if/else/if
If it ends with else, one code path must be taken.
If it ends with if, the program might not execute any path.
if (test) {
statement(s);
} else if (test) {
statement(s);
} else if (test) {
statement(s);
}
Example:
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.");
}
21
Copyright 2008 by Pearson Education
Structures
Exactly 1 path: (mutually exclusive) 0 or 1 path:
if (test) { if (test) {
statement(s); statement(s);
} else if (test) { } else if (test) {
statement(s); statement(s);
} else { } else if (test) {
statement(s); statement(s);
} }
0, 1, or many paths: (independent tests, not exclusive)
if (test) {
statement(s);
}
if (test) {
statement(s);
}
if (test) {
statement(s);
}
22
Copyright 2008 by Pearson Education
Which nested if/else?
(1) if/if/if (2) nested if/else (3) nested
if/else/if
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).
(3) nested if / else if
Printing whether a number is even or odd.
(N/A) simple if / else
Printing whether a user is lower-class, middle-class, or upper-
class based on their income.
(2) nested if / else if / else
Reading a number from the user and printing whether it
is divisible by 2, 3, and/or 5.
(1) sequential if / if / if
Printing a grade of A, B, C, D, or F based on a
percentage.
(2) nested if / else if / else if / else if / else
Copyright 2008 by Pearson Education
23
Factoring if/else code
factoring: extracting common/redundant code
Factoring if/else code can reduce the size of if/else
statements or eliminate the need for if/else
altogether.
Example:
if (ax ==
= 3;
1) {
} else if (a == 2) { x = 3 * a;
x = 6; if (a == 2) {
y++; y++;
} else { // a == 3 }
x = 9;
}
24
Copyright 2008 by Pearson Education
Code in need of factoring
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();
}
25
Copyright 2008 by Pearson Education
Code after factoring
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();
patterns.
The "dangling if" problem
What can be improved about the following code?
if (x < 0) {
System.out.println("x is negative");
} else if (x >= 0) {
System.out.println("x is non-negative");
}
33
Copyright 2008 by Pearson Education
if/else, return answer 1
// Prompts for a maximum number and prints each prime up to that maximum.
import java.util.*;
public class Primes {
public static void main(String[] args) {
// read max from user
Scanner console = new Scanner(System.in);
System.out.print("Maximum number? ");
int max = console.nextInt();
printPrimes(max);
}
// Prints all prime numbers up to the given
maximum.
public static void printPrimes(int max) {
int primes = 0;
for (intifi (countFactors(i) == 2)
= 2; i <= max; i++) { // i is prime
{ System.out.print(i + "
"); primes++;
}
}
System.out.println();
double percent = 100.0 * primes / max;
System.out.printf("%d primes (%.2f%%)\n", primes, percent);
}
34
Copyright 2008 by Pearson Education
if/else, return answer 2
...
35
Copyright 2008 by Pearson Education