control structures corresponds with chapters 3 and 4
TRANSCRIPT
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)