Iteration (Loops)

Download Report

Transcript Iteration (Loops)

Iteration (Loops)
• Loops repeat a set of instructions
• Two types of loops:
– Definite loops ( for ) perform instructions
explicit (known) number of times.
– Indefinite loops ( while ) perform instructions
an indefinite (unknown) number of times (until
boolean test fails).
1
karel_part5_loops
for Loops
• General form:
for ( <initialize variable>;
<Boolean test>;
<increment> )
{
<instruction set>
}
2
karel_part5_loops
for Loops (cont.)
• <initialize variable> sets a
variable/identifier to a certain value
(variable is usually count, i, j)
• <Boolean test> is a test that is
evaluated each time the body is about to be
executed (when false, loop is exited)
• <increment> changes the loop control
variable (usually i++ or i--)
3
karel_part5_loops
i++?
• What does i++ mean
– i++ is the same as i = i + 1;
• That is not true you say.
– This does not imply i = i + 1, it increases
the value of i by 1
– E.g., if i has the value 10, then i++ changes
the value of i to 11
4
karel_part5_loops
i--?
• What does i-- mean
– i-- is the same as i = i - 1;
• That is not true you say.
– This does not imply i equals i - 1, it
decreases the value of i by 1
– E.g., if i has the value 10, then i-- changes
the value of i to 9
5
karel_part5_loops
for Loops (cont.)
• Example:
for (int x=1; x <= 5; x++)
{
karel.move();
}
• This causes karel to move 5 times
6
karel_part5_loops
for Loops (cont.)
Flow of for loops:
1. Initialization statement executes
2. If test is true, proceed to step 3; if test is
false, go to step 6
3.
4.
5.
6.
Instructions in body of loop are executed
Increment statement executes
Return to step 2
Program proceeds to statements after loop
7
karel_part5_loops
while Loops
• General form:
while ( <boolean test> )
{
<instruction list>
}
What do you know here?
–
Test = false
• Loop continues until test is false
8
karel_part5_loops
while Loops (cont.)
• Example:
while (karel.frontIsClear())
{
karel.move ();
}
• What do you know? – karel is facing a wall
• Causes karel to move continuously until
there is a wall in front of it
9
karel_part5_loops
while Loops (cont.)
Flow of while loops
1. If test is true, proceed to step 2; if test is false,
go to step 4
2. Instructions in body of loop are executed
3. Go to step 1
4. Statements after loop are executed
10
karel_part5_loops
Infinite Loops
• In a for or while loop, it is possible for
the test to never be false
• When this happens, the loop continues
infinitely
• Depending on the compiler, application, and
other circumstances, an error may occur or
the app may crash
11
karel_part5_loops
while Loops (cont.)
• Write a method that turns the Robot Left until the
Robot is facing North.
public void faceNorth()
{
while (! facingNorth() )
turnLeft();
}
* note: the number of left turns needed is unknown
12
karel_part5_loops
Examples
• Pick up seven beepers.
public void pick7Beepers()
{
// what type of loop?
}
13
karel_part5_loops
Examples
• Pick up seven beepers.
public void pick7Beepers()
{
for(int j = 1; j <= 7; j++)
pickBeeper();
}
14
karel_part5_loops
Another Examples
• Move forward until next to another Robot.
public void moveToRobot()
{
// what type of loop
}
15
karel_part5_loops
Another Examples
• Move forward until next to another Robot.
public void moveToRobot()
{
while (! nextToARobot() )
move();
}
16
karel_part5_loops
One Last Examples
• Create a method that moves the Robot forward a
specific number of times.
public void moveForward(int numMoves)
{
for(int j = 1; j <= numMoves; j++)
move();
}
17
karel_part5_loops
Comments on Previous Example
public void moveForward(int numMoves)
{
for(int j = 0; j < numMoves; j++)
move();
}
• numMoves is a parameter provided by the client.
Sample calls:
moveForward(11);
moveForward(7);
moveForward(15+7);
moveForward(15/4+7);
moveForward(num);
//
//
//
//
//
moves
moves
moves
moves
moves
the
the
the
the
the
robot
robot
robot
robot
robot
forward
forward
forward
forward
forward
11 times
7 times
22 times
10 times
num times
18
karel_part5_loops
One More Time
• Create a method that has the Robot put a
specific number of Beepers.
public void put_N_Beepers(int numBeeps)
{
for(int j = 1; j <= numBeeps; j++)
putBeepers();
}
19
karel_part5_loops
Nested Loops
• Like nested if’s, it is possible to have
a loop inside a loop
for(int j = 0; j < 3; j++)
{
for(int k = 0; k < 2; k++)
System.out.println(j + “,“ + k);
}
• Generates the following output:
Note: Each pair of numbers are on separate lines
0,0
0,1
1,0
1,1
2,0
2,1
20
karel_part5_loops
Nested Loops - Again
for(int j = 0; j < 2; j++)
{
int k = 0;
while(k < 4)
{
System.out.println(j + “,“ + k);
k++;
}
}
• Generates the following output:
Note: Each pair of numbers are on separate lines
0,0
0,1
0,2
0,3
1,0
1,1
1,2
1,3
21
karel_part5_loops
Nested Loops
2
– Again
for(int j = 0; j < 5; j++)
{
int k = 0;
while(k < 3)
{
k++;
System.out.println(j + “,“ + k);
}
}
• Generates the following output:
Note: Each pair of numbers are on separate lines
0,1 0,2 0,3 1,1 1,2 1,3 2,1 2,2 2,3
3,1 3,2 3,3 4,1 4,2 4,3
22
karel_part5_loops
Nested Loops – With Functions
Suppose
public int calculate(int a, int b) {
return 2 * a - b + 7;
}
then
for(int j = 0; j < 3; j++)
{
int k = 0;
while(k <= 3)
{
k++;
System.out.println( calculate(j, k) );
}
• Generates the following output:
Note: Each number is on a separate line.
6, 5, 4, 3, 8, 7, 6, 5, 10, 9, 8, 7, 6
23
karel_part5_loops
Your First Assignment
• Implement methods declared in TreasureSeekerBot
class.
• Invoke MainDriver1 to test your implementation. If
you correctly implement each method, each Robot will
perform a specific task.
• You will then implement one additional method required
by MainDriver2 allowing a Robot to following a
specific series of commands to find the Hidden treasure!
• See handout (Karel_part5_loops.doc) for details.
24
karel_part5_loops
Your Second Assignment
• Your assignment is to implement the
NewAndImprovedBeeperSweeperRobot Robot that picks ALL beepers
on every corner in a room.
• Invoke MainDriver1 to test your implementation. If you correctly
implement the class, the Robot will collect ALL beepers from every
corner in the Room.
• The are also different in this assignment. The Rooms will no longer be
a constant size. All rooms will 6 wide, but the length will be unknown.
– Did you hear me say while loop?
• In MainDriver2, you will construct Robots to collect All beepers
from ALL corner in ALL rooms!
• See handout (Karel_part5-1_loops.doc) for details.
25
karel_part5_loops
Your Third Assignment
• Your assignment is to do lab 16.
• All three (oops that is four) parts!
• See handout (Karel_part6.doc) for details.
26
karel_part5_loops