Transcript

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.

karel_part5_loops

26

Your Third Assignment

• Your assignment is to do lab 16.

• All three (oops that is four) parts!

• See handout (Karel_part6.doc) for details.


Top Related