Loops More loops Offbyone errors Infinite loops Nested
Loops • More loops • Off-by-one errors • Infinite loops • Nested Loops
Multiplying Numbers int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product = product* next. Num; next. Num = Keyboard. read. Int(); } print (product);
Cumulative Assignment int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product *= next. Num; next. Num = Keyboard. read. Int(); } print (product); product *= next. Num <variable> <operator>= <expression> sum += num product = product*num <variable> = <variable> <operator> <expression> sum = sum+num
Multiplying Positive Numbers int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product = product* next. Num; next. Num = Keyboard. read. Int(); } print (product);
Multipling N Numbers (edit) int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product *= next. Num; next. Num = Keyboard. read. Int(); } print (product);
Multipling N Numbers (edited) int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product *= next. Num; next. Num = Keyboard. read. Int(); } print (product); int list. Length = read. List. Length(); int counter = 0; int next. Num; int product = 1; while (counter < list. Length) { counter += 1; next. Num = read. Next. Number(); product *= next. Num; } print (product);
Multipling N Numbers (soln) int product = 1; int n = read. Num. Elements(); int counter = 0; while (counter < n) { int next. Num = read. Num(); product *= next. Num; counter += 1; }
Multipling First N Numbers: N! (edit) ? ? ? Factorial(n) == n! 1*2*3*4 … n
Multipling First N Numbers int product = 1; int n = 2; int counter = 0; while (counter < n) { product *= counter; counter += 1; } System. out. println (product); 1*2*3*4 … n 1*0*1
Multipling First N Numbers int product = 1; int n = ? ? ? ; int counter = 0; while (counter < n) { product *= counter; counter += 1; } System. out. println (product); 1*2*3*4 … n 1*0*1*2* … n-1 Off-by-one
Multipling First N Numbers int product = 1; int n = ? ? ? ; int counter = 1; while (counter < n) { product *= counter; counter += 1; } System. out. println (product); 1*2*3*4 … n 1*1*2* … n-1 Off-by-one
Multipling First N Numbers int product = 1; int n = ? ? ? ; int counter = 1; while (counter <= n) { product *= counter; counter += 1; } System. out. println (product); 1*2*3*4 … n 1*1*2* … n-1*n
Better Name int product = 1; int n = ? ? ? ; int next. Multiplier = 1; while (next. Multiplier <= n) { product *= next. Multiplier; next. Multiplier += 1; } System. out. println (product); 1*2*3*4 … n 1*1*2* … n-1*n
Better Name int product = 1; int n = ? ? ? ; int next. Multiplier = 0; while (next. Multiplier <= n) { product *= next. Multiplier; next. Multiplier += 1; } System. out. println (product); 1*2*3*4 … n 1*0*1* 2… n-1*n easy to spot off-by-one error
Incrementing Counter Before Operation int product = 1; int n = ? ? ? ; int prev. Multiplier = 0; while (prev. Multiplier <= n) { 1*1*2* … n-1*n*n+1 prev. Multiplier += 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n Off-by-one
Incrementing Counter Before Operation int product = 1; int n = ? ? ? ; int prev. Multiplier = 0; while (prev. Multiplier < n) { 1*1*2* … n-1*n prev. Multiplier += 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n
Checking of Non Equality int product = 1; int n = ? ? ? ; int prev. Multiplier = 0; while (prev. Multiplier != n) { prev. Multiplier += 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n
Checking of Non Equality int product = 1; int n = -5; int prev. Multiplier = 0; while (prev. Multiplier != n) { prev. Multiplier += 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n
Checking of Non Equality int product = 1; int n = -5; int prev. Multiplier = 0; while (prev. Multiplier != n) { -5*-4*-3*-2*-1*0*1*2. . . prev. Multiplier += 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n Infinite Loop
Counter not changed int product = 1; int n = ? ? ? ; int prev. Multiplier = 0; while (prev. Multiplier < n) { 1*0*0…. . product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n Infinite Loop
Counter changed in wrong direction int product = 1; int n = ? ? ? ; int prev. Multiplier = 0; while (prev. Multiplier < n) { prev. Multiplier -= 1; product *= prev. Multiplier; } System. out. println (product); 1*2*3*4 … n 1*0*-1*-2*-3 Infinite Loop
Guarding Against Infinite Loops • Update variable(s) in loop expression. • Expression must converge to false.
Decrementing Solution int product = 1; while (n > 0) { product *= n; n -= 1; } System. out. println(product); 1*2*3*4 … n 1*n*n-1*n-2*. . 1 Backwards multiplication
Decrementing Assignment int product = 1; while (n > 0) { product *= n; n --; } System. out. println(product); n-- n = n-1; n++ n = n+1;
Counter-Controlled Vs Event Controlled int product = 1; int next. Num = Keyboard. read. Int(); while (next. Num >= 0) { product = product* next. Num; next. Num = Keyboard. read. Int(); } print (product); int product = 1; int n = read. Num. Elements(); int counter = 0; while (counter < n) { int next. Num = read. Num(); product *= next. Num; counter += 1; } Event-Controlled Counter-Controlled
Counter-Controlled Vs Event. Controlled • Number of loop iterations • Limit not known before (executions of loop body) loop starts. known before loop – Test one more events (e. g. reading of input) occurring executed – initialize counter to some value – increment/decrement counter by fixed step beginning/end of body – exit when counter reaches limit. while loop executes. – Terminate when events make loop condition false.
Counter-Controlled Vs Event. Controlled Counting until 10 in Hide & Seek Counter-controlled Searching for others in Hide & Seek Event-controlled Grading Comp 14 exams Counter-controlled Fishing for the right answer from students Event-controlled & Counter-controlled Counting the days until it is vacation Counter-controlled Counting # of candies in a jar Event-controlled
Factorial List (edit) int n = ? ? ? ; int product = 1; while (n > 0) { product *= n; n -= 1; } return product;
Factorial List (edited) int new. Val = Keyboard. read. Int(); while (new. Val >= 0) { int product = 1; n = new. Val; while (n > 0) { product *= n; n -= 1; } return product;
Factorial List (soln) public static int factorial (int n) { int product = 1; while (n > 0) { product *= n; n -= 1; } return product; } public static void main (String[] args) { int n = Keyboard. read. Int(); while (n >= 0) { System. out. println(“factorial =“ + factorial(n)); n = Keyboard. read. Int(); } }
Removing Code Duplication (edit) public static void main (String[] args) { int n = Keyboard. read. Int(); while (n >= 0) { System. out. println(“factorial =“ + factorial(n); n = Keyboard. read. Int(); } }
Removing Code Duplication (edited) public static void main (String[] args) { int n = Keyboard. read. Int(); while (n >= 0) { System. out. println(“factorial =“ + factorial(n); n = Keyboard. read. Int(); } }
break Statement public static int factorial (int n) { int product = 1; while (n > 0) { product *= n; n -= 1; } return product; } public static void main (String[] args) { while (true) {// loop condition never false int n = Keyboard. read. Int(); if (n < 0) break; System. out. println(“factorial =“ + factorial(n); } }
- Slides: 33