260 likes | 376 Views
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). for Loops.
E N D
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
for Loops • General form:for ( <initialize variable>; <Boolean test>; <increment> ){ <instruction set>} 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--) 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 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 karel_part5_loops
for Loops (cont.) • Example:for (int x=1; x <= 5; x++){ karel.move();} • This causes karel to move 5 times karel_part5_loops
for Loops (cont.) Flow of for loops: • Initialization statement executes • If test is true, proceed to step 3; if test is false, go to step 6 • Instructions in body of loop are executed • Increment statement executes • Return to step 2 • Program proceeds to statements after loop 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 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 karel_part5_loops
while Loops (cont.) Flow of while loops • If test is true, proceed to step 2; if test is false, go to step 4 • Instructions in body of loop are executed • Go to step 1 • Statements after loop are executed 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 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 karel_part5_loops
Examples • Pick up seven beepers. public void pick7Beepers() { // what type of loop? } karel_part5_loops
Examples • Pick up seven beepers. public void pick7Beepers() { for(int j = 1; j <= 7; j++) pickBeeper(); } karel_part5_loops
Another Examples • Move forward until next to another Robot. public void moveToRobot() { // what type of loop } karel_part5_loops
Another Examples • Move forward until next to another Robot. public void moveToRobot() { while (! nextToARobot() ) move(); } 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(); } 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); // 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
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
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
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 karel_part5_loops
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,3 3,1 3,2 3,3 4,1 4,2 4,3 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 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. karel_part5_loops
Your Second Assignment • Your assignment is to implement the NewAndImprovedBeeperSweeperRobotRobot 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
Your Third Assignment • Your assignment is to do lab 16. • All three (oops that is four) parts! • See handout (Karel_part6.doc) for details. karel_part5_loops