Control Structures Corresponds with Chapters 3 and 4

Preview:

Citation preview

Control StructuresControl Structures

Corresponds with Chapters 3 and 4Corresponds with Chapters 3 and 4

Control StatementsControl Statements Decisions (selections)Decisions (selections)

ifif statements statements

switchswitch statements statements

Iterations (repetitions)Iterations (repetitions) forfor loops (enumerated) loops (enumerated)

whilewhile loops (top-tested) loops (top-tested)

do whiledo while loops (bottom- loops (bottom-tested)tested)

ifif Statement Statement

if (if (booleanExpressionbooleanExpression) ) single statement;single statement;

Evaluates to true or false

Must be enclosed in parentheses.

Remember to indent the subordinate statement

ifif Statement Statement

if (booleanExpression) { statement1;statement2;…statementn;

}

If you have multiple subordinate statements, these must be a block enclosed in braces.

if flowchartif flowchart

Boolean test

Subordinate statement(s)

Independent statement(s)

true

false

Example:Example:

if (i >= 0 && i <= 10) if (i >= 0 && i <= 10) System.out.println("i is anSystem.out.println("i is an integer between 0 and 10");integer between 0 and 10");

boolean valueboolean value

boolean value

Statement executes only if both conditions are true

The The if...elseif...else Statement Statementif (booleanExpression) if (booleanExpression)

{ {

statement(s)-for-the-true-case;statement(s)-for-the-true-case;

}}

else else

{{

statement(s)-for-the-false-case;statement(s)-for-the-false-case;

}}Note: blocks with braces are necessary when there are multiple subordinate statements. They are optional when there is a single subordinate statement.

if-- else flowchartif-- else flowchart

Boolean test

statement(s) subordinate to if

Independent statement(s)

true

false

statement(s) subordinate to else

if...elseif...else Example Example

if (radius >= 0)if (radius >= 0){ { area = radius*radius*PI;area = radius*radius*PI; System.out.println("The area for the " System.out.println("The area for the " + "circle of radius " + radius + " is" + "circle of radius " + radius + " is"

+ area);+ area);}}elseelse System.out.println("Negative input");System.out.println("Negative input");

The if branch statement must be in a block because there are two of them.

There is only one else-branch statement. It does not need to be in a block, but you can if you want.

Nested Nested ifif Statements Statements

This is true indentation for the nesting… inner ifs are nested within else of previous if statement.

This has the same effect, but is more readable. Unlike VB, there is no ElseIf clause in Java, but the else if lines make it look like a VB ElseIf.Similar idea to figure 3.3 p76

FlowChart for if – else if -- FlowChart for if – else if -- elseelse

Boolean test

statement(s) subordinate to if

Independent statement(s)

true

false

statement(s) subordinate to elseif

Boolean test

false

statement(s) subordinate to else

true

Nesting an if - else Nesting an if - else inside the if portioninside the if portion

if (boolean expression1) if (boolean expression1) if (boolean expression2)if (boolean expression2)

statement1;statement1;elseelse

statement2;statement2;

The nested if-else.

NOTE: an else is always associated with the most recent if. This else is the result of boolean expression2, not boolean expression1.

FlowChart for FlowChart for if if with nested if -- elsewith nested if -- else

Boolean test1

Independent statement(s)

false

true

statement1 subordinate to success on boolean test2. Therefore both tests succeeded.

Boolean test2

false

true

statement2 subordinate to success on boolean test2. Therefore test1 succeeded and test2 failed.

Outer if-else with a Outer if-else with a nested if (no inner else)nested if (no inner else)

if (boolean expression1){ if (boolean expression1){ if (boolean expression2)if (boolean expression2)

statement1;statement1;}}elseelsestatement2;statement2;

The nested if.

NOTE: here, because of the braces, the else is associated with the if for boolean expression #1.

FlowChart for FlowChart for if -elseif -elsewith nested ifwith nested if

Boolean test1

Independent statement(s)

false

statement1 subordinate to success on boolean test2. Therefore both tests succeeded.

Boolean test2

false

true

statement2 subordinate to failure of boolean test1 (the outer else).

true

Shortcut Shortcut ifif Statements Statementsif (x > 0) if (x > 0)

y = 1y = 1else else y = -1;y = -1;

is equivalent tois equivalent to

y = (x > 0) ? 1 : -1;y = (x > 0) ? 1 : -1;

test

if

Returned if true

else

Returned if false

switchswitch Statements Statementsswitch (switch (switch-expressionswitch-expression)){ { case case value1value1: :

statement(s) 1;statement(s) 1;break;break;

case case value2value2: : statement(s) 2;statement(s) 2;break;break;

… … case case valueNvalueN: interestRate = 9.0;: interestRate = 9.0;

statement(s) N;statement(s) N;break;break;

default: default: statement(s) for default;statement(s) for default;

}}

switch-expression can evaluate to char, byte, short, or int.

break causes control to skip past the end of the switch block.

Without break, control would fall through to the next case.

No break needed for last condition

switchswitch Statements Statementsswitch (status) {switch (status) { case 0: compute taxes for single filers;case 0: compute taxes for single filers; break;break; case 1: compute taxes for married file jointly;case 1: compute taxes for married file jointly; break;break; case 2: compute taxes for married file separately;case 2: compute taxes for married file separately; break;break; case 3: compute taxes for head of household;case 3: compute taxes for head of household; break;break; default: System.out.println("Errors: invalid status");default: System.out.println("Errors: invalid status"); System.exit(0);System.exit(0);}}

switchswitch Statement Flow Statement Flow ChartChart

status is 0 Compute tax for single filers break

Compute tax for married file jointly break status is 1

Compute tax for married file separatly break status is 2

Compute tax for head of household break status is 3

Default actions default

Next Statement

EquivalentEquivalent if if statementstatementif (status == 0)if (status == 0)

compute tax for single filers;compute tax for single filers;

else if (status == 1)else if (status == 1)

compute tax for married filing jointly;compute tax for married filing jointly;

else if (status == 2)else if (status == 2)

compute tax for married filing separately;compute tax for married filing separately;

else if (status == 3)else if (status == 3)

compute tax for head of household;compute tax for head of household;

else{else{System.out.println(System.out.println(

("Errors: invalid status");("Errors: invalid status");System.exit(0);System.exit(0);

}}

ExerciseExerciseif (a==1)if (a==1)

x += 6;x += 6;

else if (a == 2)else if (a == 2)

x += 10;x += 10;

else if (a == 3)else if (a == 3)

x += 16;x += 16;

else if (a == 4)else if (a == 4)

x += 34;x += 34;

Convert this if statement into a switch statement

whilewhile Loops Loopswhile (continue-condition) while (continue-condition) {{ // loop-body;// loop-body;}}

Top-tested loopTest before performing statements of loop Loop body may never execute

Listing 4.4 p109 – Listing 4.4 p109 – User Decides when to quitUser Decides when to quit

Initial data input – before the loop

Subsequent data inputs – toward the end of the loop body

Do-whileDo-while Loops Loopsdodo{{ //loop body;//loop body;} while (continue-condition)} while (continue-condition)

Bottom-tested loopPerform statements of loop before testingAlways enter the loop body at least once

Listing 4.5 – a Do-While Listing 4.5 – a Do-While LoopLoop

Test is at the bottom

forfor Loops Loops

for (control variable initialization;for (control variable initialization; continue-test; continue-test;

adjustment-statement)adjustment-statement){{ //loop body;//loop body;}}

1) assignment statement

2) boolean expression

3) assignment statement

1) Set initial value for loop counter (only once, before looping starts)

2) Test loop counter (also called control variable) to see if it is less than the max loop allowed (before executing loop body)

3) Increment loop counter (after executing loop body) (usually an increment operator).

forfor Loop Flow Chart Loop Flow Chart

forfor Loop Example: Loop Example:

int i;int i;for (i = 0; i<100; i++) for (i = 0; i<100; i++) {{ System.out.println(“Hi. i is:” System.out.println(“Hi. i is:”

+ i); + i); }}

Here, the loop counter variable (called i ) is available for use outside the loop.

Alternative Syntax:Alternative Syntax:Declare Loop Counter in Declare Loop Counter in

InitializationInitialization

for (int i = 0; i<100; i++) for (int i = 0; i<100; i++) {{ System.out.println(“Hi. i is:” System.out.println(“Hi. i is:”

+ i); + i); }}

Here, the loop counter variable (called i ) is available for use only within the loop.

The Nested The Nested forfor Loop Loop

for (int i=0; i<outerLoopLimit;i++){outer loop statement(s);for (int j=0;j<innerLoopLimit;j++){

inner loop statement(s);}outer loop statement(s);

}

Body of outer loop

Body of inner loop

Body of outer loop will execute outerLoopLimit times

Body of inner loop will execute innerLoopLimit times for each time the outer loop body executes.

Total innerLoopLimit * outerLoopLimit times!

Initialize outer loop counter

Initialize inner loop counter

Test to continue

outer loop

Test to continue

inner loop

Outer loop statement(s)

Outer loop statement(s)

Inner loop statement(s)

Increment outer loop counter

Increment inner loop counter

Statements preceding loop

Statements following loop

No

No

Yes

Yes

The Nested The Nested forfor Loop -- Loop --

FlowchartFlowchart

Nested Loop ExampleNested Loop Example(my example)(my example)

Outer loop

Inner loop

Example Program RunExample Program Run

A couple points about the A couple points about the exampleexample

Max loop count value can be any numeric expression. Here it’s a variable

Special escape character \t for tab.

Reminders about packages Reminders about packages from the examplefrom the example

The class NestedForLoop is in the package called controlStructurePackage.

Therefore, there is a file called NestedForLoop.class in a folder called controlStructurePackage.

Reminders about packages Reminders about packages from the examplefrom the example

In order to use a class from outside your own package, you must import the package that the class is contained in.

Here, we import the JOptionPane class from the javax.swing package.

Another Example -- listing 4.6 p115Another Example -- listing 4.6 p115

Listing 4.6Listing 4.6

Loop with single statement in body

Listing 4.6Listing 4.6

An if statement nested inside a for loop, which is itself nested in another for loop.

Listing 4.6Listing 4.6

At the end, the string is displayed in the output screen

Note: actions in the loops are concatenating values into the string output.

Listing 4.6 program analysisListing 4.6 program analysis

Question 1: how many times will outer loop body execute?

Question 2: how many times will inner loop body execute?

Question 3: how many times will IF branch execute?

The The breakbreak Keyword Keyword

break can be used to terminate the loop based on decisions inside the loop body.

Listing 4.11 Listing 4.11 Using the Using the break break keyword keyword

Question: how many times will this loop body execute?

What will be the value in sum?

The The continuecontinue Keyword Keyword

continue can be used to branch to the top of the loop (skipping statements in loop body) based on decisions inside the loop body.

Listing 4.12Listing 4.12Using the Using the continue continue keywordkeyword

Question 1: how many times will this loop body execute?

Question 2: how many times sum += number; execute?

Typical Nested Structure: Decision within a LoopTypical Nested Structure: Decision within a Loop(menu-driven as first statement in loop)(menu-driven as first statement in loop)

User wants to

quit?

User choice 1?

Present menu options to userInput User

Choice

Choice 1 statement(s)

Statements following loop

No

Yes

Yes

User choice n?

Choice n statement(s)

Yes

No

No

A Java ImplementationA Java Implementation

This implementation nests a switch inside a while loop.

Exercise:Exercise:Do the Do the same thing same thing by nesting by nesting an if an if statement statement inside a do-inside a do-while loop.while loop.

Other Useful ExamplesOther Useful Examples

Listing 4.8: finding the greatest common Listing 4.8: finding the greatest common divisor (while loop with nested if statement)divisor (while loop with nested if statement)

Listing 4.9: finding a sales amount (do-while Listing 4.9: finding a sales amount (do-while loop with nested if - else if - else statement)loop with nested if - else if - else statement)

Listing 4.10: printing a pyramid (outer for Listing 4.10: printing a pyramid (outer for loop with three nested for loops inside it)loop with three nested for loops inside it)

Listing 4.14: finding prime numbers (outer Listing 4.14: finding prime numbers (outer while loop with nested for loop with nested if while loop with nested for loop with nested if statement)statement)

Recommended