0% found this document useful (0 votes)
3 views

Java If Else

Uploaded by

afranealfred40
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Java If Else

Uploaded by

afranealfred40
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 33

The if/else

statement

Copyright 2008 by Pearson Education


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
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);
} }

 0, 1, or many paths (independent tests; not exclusive)


if (test) {
statement(s);
}
if (test) {
statement(s);
}
if (test) {
statement(s);
}
11
Copyright 2008 by Pearson Education
Which nested if/else?
 (1) if/if/if (2) nested if/else (3) nested if/else/if
 Whether a user is lower, middle, or upper-class based on income.
 (2) nested if / else if / else

 Whether you made the dean's list (GPA ≥ 3.8) or honor roll (3.5-3.8).
 (3) nested if / else if

 Whether a number is divisible by 2, 3, and/or 5.


 (1) sequential if / if / if

 Computing a grade of A, B, C, D, or F based on a percentage.


 (2) nested if / else if / else if / else if / else

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!

int z; int z = Math.max(x, y);


if (x > y) {
z = x;
} else {
z = y;
}

double d = a; double d = Math.min(a, Math.min(b, c));


if (b < d) {
d = b;
}
if (c < d) {
d = c;
}
16
Copyright 2008 by Pearson Education
Loops with if/else
 if/else statements can be used with loops or
methods:
int evenSum = 0;
int oddSum = 0;
for (int i = 1;
i <= 10; i++) {
if (i % 2 ==
0) {
evenSum
=
evenSum
+ i;
} else {
oddSum =
oddSum +
i;
}
}
System.out.println("Even sum: " +
17
evenSum);
Copyright System.out.println("Odd
2008 by Pearson Education sum: " +
oddSum);
Nested if/else

Copyright 2008 by Pearson Education


Sequential if bug
 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!");
}
else {
System.out.println("You got an F!");
}
...

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();

 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.
 If similar but code exists in each branch, look for
Copyright 2008 by Pearson Education
26

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");
}

 The second if test is unnecessary and can be


removed:
if (x < 0) {
System.out.println("x is negative");
} else {
System.out.println("x is non-negative");
}
 This is also relevant in methods that use if with return... 27
Copyright 2008 by Pearson Education
if/else with return
 Methods can return different values using if/else:
// Returns the largest of the three given integers.
public static int max3(int a, int b, int c)
{ if (a >= b && a >= c) {
return a;
} else if (b >= c && b >= a) {
return b;
} else {
return c;
}
}

 Whichever path the code enters, it will return the


appropriate value.
 Returning a value causes a method to immediately
exit.
 All code paths must reach a return statement.
 All paths must also return a value of the same type. 28
Copyright 2008 by Pearson Education
All paths must return
public static int max3(int a, int b, int c)
{ if (a >= b && a >= c) {
return a;
} else if (b >= c && b >= a)
{ return b;
}
// Error: not all paths return a
value
}

 The following also does not


compile:
public static int max3(int a, int b, int c)
{ if (a >= b && a >= c) {
return a;
} else if (b >= c && b >= a)
{ return b;
} else if (c >= a && c >= b)
{ return c;
}
}
 The compiler thinks if/else/if
29
code might skip all paths.
Copyright 2008 by Pearson Education
if/else question
BMI Weight class
A person's body mass index below 18.5 underweight
(BMI) is defined to be:
18.5 - 24.9 normal

weight2 25.0 - 29.9 overweight


BMI = height  30.0 and up obese
703
 Write a program that produces the following output:
This program reads data for two people and computes
their body mass index (BMI) and weight status.
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 body mass index = 27.87
overweight
Person #2 body mass index = 23.49
normal
Difference = 4.38
30
Copyright 2008 by Pearson Education
if/else answer
// This program computes two people's body mass index (BMI)
// and compares them. The code uses parameters and 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.printf("Difference
= %.2f\n", Math.abs(bmi1
- bmi2));
}
// prints a welcome message
explaining the program
public static void
introduction() {
System.out.println("This program reads in data for two people");
System.out.println("and computes their body mass index (BMI)");
System.out.println("and weight status.");
System.out.println(); 31
}
Copyright 2008 by Pearson Education
...
Scanner BMI solution, cont.
// 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 BMIbased 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.printf("Person #%d body mass index = %.2f\n", number,
bmi); if (bmi < 18.5) {
System.out.println("underweight");
} else if (bmi < 25)
{ System.out.println("normal"
);
} else if (bmi < 30)
{ System.out.println("overweight"
} ); 32
Copyright 2008 by Pearson Education
} else {
System.out.println("obese");
}
if/else, return question
 Write a method countFactors that
returns the number of factors of an
integer.
 countFactors(24) returns 8 because
1, 2, 3, 4, 6, 8, 12, and 24 are factors of
24.

 Write a program that prompts the user for a maximum


integer and prints all prime numbers up to that max.
Maximum number? 52
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
15 primes (28.84%)

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
...

// Returns how many factors the given number has.


public static int countFactors(int number) {
int count = 0;
for (int i = 1; i <= number; i++) {
if (number % i == 0) {
count++; // i
is a factor of number
}
}
return count;
}
}

35
Copyright 2008 by Pearson Education

You might also like