karel_part5_loops
1
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).
karel_part5_loops
2
for Loops
• General form:for ( <initialize variable>;
<Boolean test>;<increment> )
{<instruction set>
}
karel_part5_loops
3
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--)
karel_part5_loops
4
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
karel_part5_loops
5
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
karel_part5_loops
6
for Loops (cont.)
• Example:for (int x=1; x <= 5; x++){
karel.move();}
• This causes karel to move 5 times
karel_part5_loops
7
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. Instructions in body of loop are executed
4. Increment statement executes
5. Return to step 2
6. Program proceeds to statements after loop
karel_part5_loops
8
while Loops
• General form:while ( <boolean test> ){
<instruction list>}
What do you know here?– Test = false
• Loop continues until test is false
karel_part5_loops
9
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
karel_part5_loops
10
while Loops (cont.)
Flow of while loops1. 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
karel_part5_loops
11
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
karel_part5_loops
12
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
karel_part5_loops
13
Examples
• Pick up seven beepers.
public void pick7Beepers()
{
// what type of loop?
}
karel_part5_loops
14
Examples
• Pick up seven beepers.
public void pick7Beepers()
{
for(int j = 1; j <= 7; j++)
pickBeeper();
}
karel_part5_loops
15
Another Examples
• Move forward until next to another Robot.
public void moveToRobot()
{
// what type of loop
}
karel_part5_loops
16
Another Examples
• Move forward until next to another Robot.
public void moveToRobot()
{
while (! nextToARobot() )
move();
}
karel_part5_loops
17
One Last Example
• 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();
}
karel_part5_loops
18
Comments on Previous Examplepublic void moveForward(int numMoves)
{
for(int j = 0; j < numMoves; j++)
move();
}• numMoves is a parameter provided by the client.
Sample calls:moveForward(11); // moves the robot forward 11 times
moveForward(7); // moves the robot forward 7 times
moveForward(15+7); // moves the robot forward 22 times
moveForward(15/4+7); // moves the robot forward 10 times
moveForward(num); // moves the robot forward num times
karel_part5_loops
19
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();
}
karel_part5_loops
20
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
karel_part5_loops
21
Nested Loops - Againfor(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
karel_part5_loops
22
Nested Loops – Again2
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,33,1 3,2 3,3 4,1 4,2 4,3
karel_part5_loops
23
Nested Loops – With FunctionsSupposepublic int calculate(int a, int b) { return 2 * a - b + 7;}
thenfor(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
karel_part5_loops
24
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.
karel_part5_loops
25
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.