Objectives Be able to use a switch statement for selective execution Be able to implement repetition using alternative loops do while loops Be able to write a recursive method 3 The ID: 783261
Download The PPT/PDF document "Java Advanced Control Structures" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
Java
Advanced Control Structures
Slide2Objectives
Be able
to use a switch statement for selective execution.
Be able to implement repetition using alternative loops:do-while loopsBe able to write a recursive method.
Slide33
The
switch Statement
Multi-alternative selection can be implemented using:
The multi-branch
if
statement
The
switch
statement
The multi-branch
if
statement can always be used.
The
switch
statement is a specialized form that operates more efficiently under certain circumstances.
Slide44
switch
:
Syntax and Behavior
expression
StatementList
1
value
1
StatementList
2
value
2
StatementList
n
switch (
expression
) {
case
value
1
:
statementList
1 case value2: statementList2 … default: statementListn}Requirements:expression must be integer compatible;values must be constants or literals;Cases check for equality.
otherwise
Slide55
switch
&
if
:
Examples
switch (
dayCode
) {
case 1:
System.out.println
("Sunday");
break;case 2:
System.out.println("Monday"); break;case 3:
System.out.println("Tuesday"); break;
case 4: System.out.println("Wednesday"); break;
case 5: System.out.println
("Thursday"); break;case 6: System.out.println
("Friday"); break;case 7:
System.out.println
("Saturday"); break;
default:
System.out.println("invalid code");
}if (dayCode == 1) { System.out.println("Sunday");} else if (dayCode == 2) { System.out.println("Monday");} else if (dayCode == 3) { System.out.println("Tuesday");} else if (dayCode
== 4) {
System.out.println("Wednesday");
} else if (
dayCode
== 5) {
System.out.println
("Thursday");
} else if (
dayCode
== 6) {
System.out.println
("Friday");
} else if (
dayCode
== 7) {
System.out.println
("Saturday");
} else {
System.out.println
("invalid code);
}
Slide66
switch
:
Fall-Through Behavior
The
switch
statement implements
fall-through
behavior.
More than one case can be associated with one statement list.
If only one list is to be executed, then that list must explicitly exit the switch using:
breakreturnthrow
exit
Slide77
switch
:
Examples
switch (
dayCode
) {
case 1:
System.out.println
("Sunday");
break;
case 2:
System.out.println("Monday");
break;case 3: System.out.println("Tuesday");
break;case 4:
System.out.println("Wednesday"); break;case 5:
System.out.println("Thursday"); break;
case 6: System.out.println("Friday"); break;
case 7: System.out.println
("Saturday"); break;
default:
System.out.println("invalid code");
}
switch (dayCode) {case 1: case 7: System.out.println("weekend"); break;case 2:
case 3:
case 4:
case 5:
case 6:
System.out.println
("weekday
");
break;
d
efault
:
System.out.println
("invalid code");
}
Slide8Execute!
// value of y?
x = 3;
y = 3;switch (x + 3){
case 6: y = 1;
default: y += 1;
}
Practice
//Rewrite using switch
if (a == 1){
x += 5; }else if (a == 2) { x += 10; }else if (a == 3) { x += 16; }else if (a == 4) { x += 34;}
Slide99
The
while
Loop
while (
condition
){
statement
}
condition
False
True
A
while
loop executes a statement based on a boolean condition.
Statement
Slide1010
The
do
-
while
Loop
do {
statement
}
while
(condition);
A
do-while
loop is a post-test version of the while statement.
statement
condition
True
False
Slide1111
do-while
:
Example
System.out.print
("Guess a number from 1-10: ");
do {
number =
keyboard.nextInt
();
} while (number != 7);
System.out.println
("You guessed it!");
Slide12Execute!
// What is the output?
int
i =
3;
while
(
i
>= 1){
int
num = 1;
for (int j = 1;
j <= i; j++){ System.out.print(num + "xxx"); num *= 2; }
System.out.println(); i--;}
Slide13Execute!
// What is the output?
int
i = 1;
do
{
int
num
= 1;
for (int j = 1; j <= i
; j++){ System.out.print(
num + "yyy"); num += 2; } System.out.println(); i++;
} while (i <= 3);
Slide1414
Introduction
Recursion is a way of defining functions self-referentially.
Examples:
Droste
effect;
(Parenthetical comments (especially comments within comments), etc.);
A chain of phone callers on hold;
Inductive Proofs.
Image
from
google.com
Slide1515
Example: Factorial
Write a function that, given n, computes n!
n! == 1 * 2 * ... * (n-1) * n
Example:
5! == 1 * 2 * 3 * 4 * 5 == 120
Assumptions:
Receive n, a non-negative integer.
Return n!, a double (to avoid integer overflow).
Slide1616
Preliminary Analysis
This can be viewed as a counting problem, so we could solve it iteratively:
public static
int
factorial1(
int
n){
int
result = 1;
for (
int
i = 2; i <= n; i++){ result *= i;
} return result;
}
Slide1717
An Alternate Analysis
Consider the following alternate analysis:
n! == 1 * 2 * ... * (n-1) * n
(n-1)! == 1 * 2 * ... * (n-1)
n! == (n-1)! * n
Historically, this is how the factorial function was defined.
Slide18The Mechanics of Recursion
Design recursive functions using a three-step process:
Identify a
base case - an instance of the problem whose solution is
trivial
.
E.g., The factorial function has two base cases:
if n == 0: n! == 1
if n == 1: n! == 1
Slide192. Identify an
induction step
- a means of solving the non-trivial instances of the problem using one or more “smaller” instances of the problem.
E.g.,
n! ==
(n-1)!
*
n
Mechanics (cont.)
Slide203. Form an
algorithm
that includes the base case and induction step, and ensures that each inductive step moves toward the base case.
factorial:
Receive n.
If n > 1 then
Return factorial(n-1) * n.
Else
Return 1.
Mechanics (cont.)
Slide21public static
int
factorial(
int
n
){
if
(n > 1
){
return factorial(n-1
) * n; } else { return
1; }}
Implementation
Slide22M
ove
disks from a source pin to a target pin, using the third pin as an auxiliary.
Rules:
move only one disk at a time;
never put a larger disk onto a smaller one.
Example: Towers of Hanoi
Slide23Today’s problem is to write a program that generates the instructions for the priests to follow in moving the disks.
While quite difficult to solve iteratively, this problem has a simple and elegant
recursive
solution.
Design
Slide24public static void main (String []
args
) {
Scanner keyboard = new Scanner(
System.in
);
System.out.println
(
"
The Hanoi Towers\n");
System.out.print
("number of disks: "); int n = keyboard.nextInt();
move(n, 'A', 'B', 'C');
}
Driver Program
Slide25Base case:
Inductive case:
Design
(cont.)
Slide26We can combine these steps into the following algorithm:
0. Receive
n,
src, dest, aux.
1. If
n
> 1:
a. move(
n-1,
src
, aux,
dest); b. move(1, src,
dest, aux); c. move(
n-1, aux, dest, src); Else Display “Move the top disk from ” + src + “ to ” + dest.
Algorithm
Slide27public static void move(
int
n, char
src
, char
dest
, char aux) {
if (n > 1) {
move(n-1,
src
, aux,
dest
);
move(1, src, dest, aux); move(n-1, aux, dest, src);
} else {
System.out.println("Move the top disk from " +
src + " to " + dest); }
}Implementation
Slide28How many “moves” does it take to solve this problem as a function of
n
, the number of disks to be moved.
n # of moves required______
1 1
2 3
3 7
4 15
5 31
...
i
2i-1
64 264-1Algorithm Analysis
Slide29Given a “super-printer” that can generate and print 1,048,576 (2
20
) instructions/second, how long would it take to print 2
64-1 instructions?
2
64
/2
20
= 2
44
seconds @ 244 / 26 = 238
minutes @ 2
38 / 26 = 232 hours @ 232 / 25 = 227 days @
227 / 29 = 218 years @ 2
18 / 27 = 211 centuries
@ 211 / 24 = 27 = 128 millenniaAnalysis
(cont.)
Slide3030
Graphical Examples
Sierpinski
triangles
Tree fractals
Koch’s snowflake