©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Chapter 6 Repetition Statements
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Definition Often need to execute block of code multiple times –Repetition statements (loops) are used for this Loop termination controlled by a Boolean expression –Counting loops execute a fixed number of times. –Sentinel loops terminate on encountering a sentinel value Java has three loop structures
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Pre-Test loop int sum = 0, number = 1 number <= 100 ? false sum = sum + number; number = number + 1; true
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter while ( number <= 100 ) { sum = sum + number; number = number + 1; } Syntax for the while Statement while ( ) Statement (loop body) Boolean Expression
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Some Examples Keeps adding the numbers 1, 2, 3, … until the sum becomes larger than 1,000,000. Computes the product of the first 20 odd integers. int sum = 0, number = 1; while ( sum <= ) { sum = sum + number; number = number + 1; } 1 int product = 1, number = 1, count = 20, lastNumber; lastNumber = 2 * count - 1; while (number <= lastNumber) { product = product * number; number = number + 2; } 2
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter String inputStr; int age; inputStr = JOptionPane.showInputDialog(null, "Your Age (between 0 and 130):"); age = Integer.parseInt(inputStr); while (age 130) { JOptionPane.showMessageDialog(null, "Invalid age : Please try again."); inputStr = JOptionPane.showInputDialog(null, "Your Age (between 0 and 130):"); age = Integer.parseInt(inputStr); } Example: Testing Input Data Priming Read
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Common Loop Pitfalls infinite loops : control expression can never be false –no change is made to the variables in the control expression –the control expression is too restrictive off-by-one errors : one too many or one too few iterations of the loop
Examples of Infinite loops Infinite Loops Both loops will not terminate because the boolean expressions will never become false. int count = 1; while ( count != 10 ) { count = count + 2; } 2 int product = 0; while ( product < ) { product = product * 5; } 1
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Overflow An overflow error occurs when you attempt to assign a value larger than the maximum value the variable can hold. In Java, an overflow does not cause program termination. –For float and double, a value that represents infinity is assigned to the variable. –For int, the value “wraps around” and becomes negative.
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Round-off Errors -> Infinite Loops Using Real Numbers Loop 2 terminates, but Loop 1 does not because only an approximation of a real number can be stored in a computer memory. float count = 0.0f; while ( count != 1.0f ) { count = count f; } //eight 3s 2 float count = 0.0f; while ( count != 1.0f ) { count = count f; }//seven 3s 1
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Round-off Errors -> Off-By-One Errors int result = 0; double cnt = 1.0; while (cnt <= 10.0){ cnt += 1.0; result++; } System.out.println(result); 1 int result = 0; double cnt = 0.0; while (cnt <= 1.0){ cnt += 0.1; result++; } System.out.println(result); 2 Using Real Numbers Loop 1 prints out 10, as expected, but Loop 2 prints out 11. The value 0.1 cannot be stored precisely in computer memory
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Off-by-One Errors Goal: Execute the loop body 10 times. count = 1; while ( count < 10 ){... count++; } 1 count = 0; while ( count <= 10 ){... count++; } 3 count = 1; while ( count <= 10 ){... count++; } 2 count = 0; while ( count < 10 ){... count++; } 4 13 andexhibit off-by-one error.
Post-Test Loop int sum = 0, number = 1 sum += number; number++; sum <= ? true false
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter do { sum += number; number++; } while ( sum <= ); Syntax for the do-while Statement do while ( ) ; Statement (loop body) Boolean Expression
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Counting Loop i = 0; false number =... ; sum += number; true i ++; i < 20 ?
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter for (i = 0; i < 20; i++ ) { number = scanner.nextInt(); sum += number; } Syntax for the for Statement for ( ; ; ) Initialization Boolean Expression Increment Statement (loop body)
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter for Loop Examples for (int i = 0; i < 100; i += 5) 1 i = 0, 5, 10, …, 95 for (int j = 2; j < 40; j *= 2) 2 j = 2, 4, 8, 16, 32 for (int k = 100; k > 0; k--) ) 3 k = 100, 99, 98, 97,..., 1
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Nested Loops can be nested We can use nested loops to generate tables for (int i=1; i<=10; i++) { for (int j=1; j<=10; j++) System.out.print(i * j + "\t"); System.out.println(); } How many times does the loop execute? –The inner loop executes 10 times for each value of i
Input Loops We often need to read an unknown number of values of a particular type. –How do you know when to stop? The Scanner class has a set of methods for determining what comes next in the input –boolean hasNext() –boolean hasnextLine() –boolean hasNextInt() –boolean hasNextDouble()
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Recursion Recursion is another technique that can be used for iteration A recursive method is one that calls itself n! = n * (n-1) * (n-2) * … * 2 * 1 int factorial ( int n) { if (n<=1) return 1; else return n * factorial( n-1); } Recursion is generally less efficient than loops so use it only when you need to
©The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 4 th Ed Chapter Finding GCD