Ch04A - Conditional Execution
Ch04A - Conditional Execution
Ch04A - Conditional Execution
Chapter 4
Conditional Execution
if (test) {
statement;
...
statement;
}
• Example:
double gpa = console.nextDouble();
if (gpa >= 2.0) {
System.out.println("Application accepted.");
}
2
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 >= 2.0) {
System.out.println("Welcome to Mars University!");
} else {
System.out.println("Application denied.");
}
3
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, seen in Ch. 5.
• Example:
if (x > 0) {
System.out.println("Positive");
} else if (x < 0) {
System.out.println("Negative");
} else {
System.out.println("Zero");
}
6
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("Silver medal!");
} else if (place == 3) {
System.out.println("Bronze medal.");
} 7
Nested if structures
• exactly 1 path (mutually exclusive) • 0 or 1 path (mutually exclusive)
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);
} }
8
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
11
Nested if/else, cont'd.
// reads information for one person, computes their BMI, and returns it
public static double person(Scanner170 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) {
System.out.println("overweight");
} else {
System.out.println("obese");
}
}
}
12
Scanner170s as
parameters
• If many methods need to read input, declare a
Scanner170 in main and pass it to the other methods
as a parameter.
public static void main(String[] args) {
Scanner170 console = new Scanner170(System.in);
int sum = readSum3(console);
System.out.println("The sum is " + sum);
}
// Prompts for 3 numbers and returns their sum.
public static int readSum3(Scanner170 console) {
System.out.print("Type 3 numbers: ");
int num1 = console.nextInt();
int num2 = console.nextInt();
int num3 = console.nextInt();
return num1 + num2 + num3;
}
13
Logical operators
• Tests can be combined using logical operators:
Operato Descriptio Example Resul
r n t
&& and (2 == 3) && (-1 < false
5)
|| or (2 == 3) || (-1 < true
5)
• Example:
if (a == 1) {
System.out.println(a);
x = 3;
b = b + x; System.out.println(a);
} else if (a == 2) { x = 3 * a;
System.out.println(a);
if (a == 2) {
x = 6;
y = y + 10;
y = y + 10;
b = b + x; }
} else { // a == 3 b = b + x;
System.out.println(a);
x = 9;
b = b + x;
}
17
if/else with return
// Returns the larger of the two given integers.
public static int max(int a, int b) {
if (a > b) {
return a;
} else {
return b;
}
}
18
All paths must return
public static int max(int a, int b) {
if (a > b) {
return a;
}
// Error: not all paths return a value
}
quadrant 2 quadrant 1
x- x+
quadrant 3 quadrant 4
y-
21
Cumulative algorithms
Adding many numbers
• How would you find the sum of all integers from 1-
1000?
23
Cumulative sum loop
int sum = 0;
for (int i = 1; i <= 1000; i++) {
sum = sum + i;
}
System.out.println("The sum is " + sum);
25
Scanner170 and cumul.
sum
• We can do a cumulative sum of user input:
26
Cumulative sum question
• Modify the Receipt program from Ch. 2.
– Prompt for how many people, and each person's dinner
cost.
– Use static methods to structure the solution.
Subtotal: $75.0
Tax: $6.0
Tip: $11.25
Total: $92.25 27
Cumulative sum answer
// This program enhances our Receipt program using a cumulative sum.
// import java.util.*; // not needed since using Scanner170
public class Receipt2 {
public static void main(String[] args) {
Scanner170 console = new Scanner170(System.in);
double subtotal = meals(console);
results(subtotal);
}
// Prompts for number of people and returns total meal subtotal.
public static double meals(Scanner170 console) {
System.out.print("How many people ate? ");
int people = console.nextInt();
double subtotal = 0.0; // cumulative sum
for (int i = 1; i <= people; i++) {
System.out.print("Person #" + i +
": How much did your dinner cost? ");
double personCost = console.nextDouble();
subtotal = subtotal + personCost; // add to sum
}
return subtotal;
}
...
28
Cumulative answer,
cont'd.
...
29
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.
• Solution:
// 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;
}
30