Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax...

49
Nested conditional statements

Transcript of Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax...

Page 1: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Nested conditional statements

Page 2: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Previously discussed

• Conditional statements discussed so far:

• Syntax of the if-statement:

• if-statement

• if-else-statement  

if ( CONDITION )

ONE-statement

Page 3: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Previously discussed (cont.)

• Syntax of the if-else-statement:

if ( CONDITION )

ONE-statement

else

ONE-statement

Page 4: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Nested conditional statements

• Fact:

• Therefore:

• A conditional statement (i.e., an if-statement or an if-else-statement) is also a statement

• We can use an if-statement or an if-else-statement in the then-part (and in the else-part) of a conditional statement !!!      

Page 5: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Nested conditional statements (cont.)

• Nested conditional statement:

• Nested conditional statement = a conditional statement where the then-part and/or the else-part contains another conditional statement

Page 6: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Nested conditional statements (cont.)

• Note:

• You can nest conditional statement arbitrarily deep

• Obviously, deeper nesting makes the program difficult to understand

• You should:

• Use nested conditional statements only when necessary

• Try not to nest conditional statements too deeply

Page 7: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut

• Hair cut pricing of a saloon:

• Male customer:

• Boys (age ≤ 13): $10

• Men (age > 13): $15

• Female customer:

• Girls (age ≤ 13): $12

• Women (age > 13): $25       

Page 8: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Write a program that:

• Reads in the sex and the age

• Prints the price of the hair cut.

Page 9: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Algorithm:

Page 10: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Java program:

public class NestedIf01 { public static void main(String[] args) { char sex; int age, price = 0; Scanner in = new Scanner(System.in); // Construct Scanner object sex = in.next().charAt(0); // Read in next char into sex age = in.nextInt(); // Read in next integer into age if ( sex == 'M' ) { // Then-part of outer if-else statement if ( age <= 13 ) { price = 10; // Case: boy <-- then-part of inner if-else }

Page 11: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

else { price = 15; // Case: man <-- else-part of inner if-else } } else { // Else-part of outer if-else statement if ( age <= 13 ) { price = 12; // Case: girl <-- then-part of inner if-else } else { price = 25; // Case: woman <-- else-part of inner if-else } } System.out.println("Price = " + price); } }

Page 12: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Explanation:

• Suppose the user enters: sex = 'M' and age = 11

• Then the condition of the outer if-else-statement is satisfied and executes only the then-part of the outer if-else-statement:

// Then-part of outer if-else statement if ( age <= 13 ) { price = 10; // Case: boy <-- then-part of inner if-else } else { price = 15; // Case: man <-- else-part of inner if-else }

Page 13: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Since the then-part of the outer if-else-statement is an if-else-statement, and the condition age <= 13 is satisfied, it will only execute the then-part:

price = 10;

Page 14: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Graphically: path taken by program when input is sex = 'M' (male) and age = 11

Page 15: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

Notice that only the statement(s) in then-part of the inner and outer if-else-statements are executed (because the conditions in the inner and outer if-else-statements are satisfied)

Page 16: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Another example: path taken by program when input is sex = 'F' (female) and age = 25

Page 17: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Note:

• The expression in.next() reads in a string from the keyboard

• The expression in.next().charAt(0) returns the first character in a string from read from the keyboard

Page 18: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: determine the price for a hair cut (cont.)

• Example Program: (Demo above code) – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/NestedIf01.java   

• How to run the program:

• Right click on link and save in a scratch directory

• To compile:   javac NestedIf01.java

• To run:          java NestedIf01

Page 19: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade

• Letter grade assignment:

• grade ≥ 90:             A              

• 80 ≤ grade < 90:     B

• 70 ≤ grade < 80:     C

• 60 ≤ grade < 70:     D

• grade < 60:             F

Page 20: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Write a program that:

• Reads in a number grade

• Prints the letter grade.

Page 21: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Algorithm using non-nested if-statements:

Page 22: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Java program:

import java.util.Scanner; public class Grade01 { public static void main(String[] args) { double ng; String lg = ""; Scanner in = new Scanner(System.in); // Construct Scanner object

Page 23: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

System.out.print("Enter numbger grade: "); ng = in.nextDouble(); // Read in next number into ng if ( ng >= 90 ) lg = "A"; if ( 80 <= ng && ng < 90 ) lg = "B"; if ( 70 <= ng && ng < 80 ) lg = "C"; if ( 60 <= ng && ng < 70 ) lg = "D"; if ( ng < 60 ) lg = "F"; System.out.println("Letter grade = " + lg); } }

Page 24: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Example Program: (Demo above code) – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/Grade01.java   

• How to run the program:

• Right click on link and save in a scratch directory

• To compile:   javac Grade01.java

• To run:          java Grade01

Page 25: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Short-coming of the algorithm:

• It is inefficient

Because the algorithm will always perform 5 individual tests (in the 5 different if-statements

Page 26: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

• Fact:

• The different cases are mutually disjoint

E.g., when the first condition passes (i.e., grade ≥ 90), then the other 4 subsequent tests will all fail

Page 27: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Programming example: assign a letter grade to a number grade (cont.)

The algorithm will still have to go through these "useless" tests to reach the print statement

• We can make use of the if-else-statement to shorten the execution

Page 28: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade

• Improved algorithm to assign a letter grade:

Page 29: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

• Explanation:

• The first if-else statement breaks the cases into: ng ≥ 90 and ng < 90:

Page 30: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

If ng ≥ 90, we can assign lg = "A";

Otherwise, the execution will enter the else-part

Page 31: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

• The second if-else statement knows that ng < 90 !!! It uses the test ng >= 80 to break the cases into: 80 ≤ ng < 90 and ng < 80:

Page 32: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

Because we know that ng < 90 when we are inside the else-part of the first if-else statement, when ng ≥ 80, we can assign lg = "B"; because 80 < ng ≤ 90

Otherwise, the execution will enter the else-part of the second if-else statement

Inside the else-part of the second if-else statement, we know (for sure) that ng < 80.

• The rest of the algorithm follows the same reasoning process...

Page 33: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

• Program in Java: (I omitted the import statement for brevity)

public class Grade02 { public static void main(String[] args) { double ng; String lg = ""; Scanner in = new Scanner(System.in); // Construct Scanner object ng = in.nextDouble(); // Read in next number into ng

Page 34: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Improved algorithm to find numeric grade (cont.)

if ( ng >= 90 ) lg = "A"; else { if ( ng >= 80 ) lg = "B"; else { if ( ng >= 70 ) lg = "C"; else { if ( ng >= 60 ) lg = "D"; else lg = "F"; } } } System.out.println("Letter grade = " + lg); } }

Page 35: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Two-way selection

• A two-way selection is a choice between 2 mutually exclusive cases:

Page 36: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

Two-way selection (cont.)

• The if-else-statement is known as a two-way selection statement because it can use to make a choice between 2 mutually exclusive cases:

Page 37: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct

• A two-way selection is a choice between 3 mutually exclusive cases:

The choices of A, B and C are mutually exclusive.

Page 38: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• A common way to ensure that the 3 choices are mutually exclusive is as follows:

Page 39: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• The 3-way selection construct can be implemented using the following nested if-else statements:

Page 40: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• Notes:

Each of the conditions are mutually excusive

• The statement(s) S1; are executed only when condition1 = true

• The statement(s) S2; are executed only when (condition1 = false and condition2 = true)

• The statement(s) S3; are executed only when (condition1 = false and condition2 = false)

Page 41: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• The 3-way selection written in Java:

if ( conditionX ) { statements executed only when: conditionX = true } else { if ( conditionY ) --+ { | statements executed only when: | conditionX = false | and conditionY = true | } | One statement!! else | { | statements executed only when: | conditionX = false | and conditionY = false | } --+ }

Page 42: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• Since there is one statement in the else-part, we do not need to use a block

Page 43: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

A three-way selection construct (cont.)

• The popular way to write a 3-way selection in Java:

if ( conditionX ) { statements executed only when: conditionX = true } else if ( conditionY ) --+ { | statements executed only when: | conditionX = false | and conditionY = true | } | One statement!! else | { | statements executed only when: | conditionX = false | and conditionY = false | } --+

Page 44: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct

• The 3-way selection construct can be generalized into an N-way selection

Page 45: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct (cont.)A N-way selection construct looks like the following:

if ( condition1 ) { S1; (one or more statements) } else if ( condition2 ) { S2; (one or more statements) } else if ( condition3 ) { S3; (one or more statements) } ... else if ( conditionN-1 ) { SN-1; (one or more statements) } else { SN; (one or more statements) }

Page 46: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct (cont.)

• Notes:

• S1 will be executed (only) when condition1 = true

• S2 will be executed (only) when (condition1 = false and

condition2 = true)

• S3 will be executed (only) when (condition1 = false,

condition2 = false and condition3 = true)

• And so on...

Page 47: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct (cont.)

• Example: the number grade program can be written using an N-way selection

public class Grade03 { public static void main(String[] args) { double ng; String lg = ""; Scanner in = new Scanner(System.in); // Construct Scanner object ng = in.nextDouble(); // Read in next number into ng

Page 48: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct (cont.) if ( ng >= 90 ) { lg = "A"; } else if ( ng >= 80 ) { lg = "B"; } else if ( ng >= 70 ) { lg = "C"; } else if ( ng >= 60 ) { lg = "D"; } else { lg = "F"; } System.out.println("Letter grade = " + lg); } }

Page 49: Nested conditional statements. Previously discussed Conditional statements discussed so far: Syntax of the if-statement: if-statement if-else-statement.

The N-way selection construct (cont.)

• Example Program: (Demo above code) – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/Grade03.java   

• How to run the program:

• Right click on link and save in a scratch directory

• To compile:   javac Grade03.java

• To run:          java Grade03