Download presentation
Presentation is loading. Please wait.
Published byDella Harmon Modified over 6 years ago
1
Determinate Loop Pattern, Java's for Statement, and Scanner objects
2nd part of Chapter 6: Repetition
2
Algorithmic Pattern: The Determinate loop
We often need to perform some action a specific number of times: Produce 89 paychecks Count down to 0 (take 1 second of the clock). Simulate playing a game of "Let's Make a Deal" 10,000 times The determinate loop pattern repeats some action a specific number of times
4
Determinate Loops This template repeats a process n times
replace comments with appropriate statements int n = /* how often we must repeat the process */ for( int j = 1; j <= n; j = j + 1 ) { // the process to be repeated } determinate loops must know the number of repetitions before they begin know exactly how many employees, or students, or whatever that must be processed, for example
5
General Form The Java for loop
for ( initial statement ; loop-test ; update-step) { repeated-part } When a for loop is encountered, the initial-statement is executed (used here quite often as int j = 1). The loop-test evaluates. If loop-test is false, the for loop terminates. If loop-test is true, the repeated-part executes followed by the update-step.
6
Flow chart view of a for loop
Initial statement True False Loop test Iterative part update-step
7
Example for loop that produces an average
Scanner keyboard = new Scanner(System.in); double sum = 0.0; System.out.print("How many do you want to average? "); int n = keyboard.nextInt(); // Do something n times for (int j = 1; j <= n; j = j + 1) { System.out.print("Enter number: "); // <- Repeat 3 int number = keyboard.nextInt(); // <- statements sum = sum + number; // <- n times } double average = sum / n; System.out.print("Average = " + average);
8
Code Demo: Use the debugger to trace this code
int n = 5; for (int j = 1; j <= n; j = j + 1) { System.out.println(j); } for (int k = 10; k >= 0; k = k - 2) { System.out.println(k);
9
Other Incrementing Operators
It is common to see determinate loops of this form where n is the number of repetitions for( int j = 1; j <= n; j++ ) } // } The unary ++ and -- operators add 1 and subtract 1 from their operands, respectively. int n = 0; n++; // n is now 1 equivalent to n=n+1; or n+=1; n++; // n is now 2 n--; // n is now 1 again The expression count++ is equivalent to the more verbose count = count + 1;
10
Other Assignment Operators
Java has several assignment operators in addition to = (-= and +=) j -= 2; is the equivalent of j = j - 2; sum += x; is the equivalent of sum = sum + x; What is sum when a user enters 7 and 8? int sum = 0; int x = 0; System.out.print("Enter a number: "); x = keyboard.nextInt(); // user enters 7 sum += x; x = keyboard.nextInt(); // user enters 8
11
Indeterminate loop with a Scanner
Sometimes a stream of input from the keyboard or a file needs to be read until there is no more data in the input stream Consider a Scanner object constructed with a String argument The string represents an input stream You will need Scanner in project 2, methods 9 and 10: sumInScanner and maximumInScanner
12
These assertions pass @Test public void showScanner() {
Scanner scannerWithInts = new Scanner("1 2 3"); assertEquals(1, scannerWithInts.nextInt()); assertEquals(2, scannerWithInts.nextInt()); assertEquals(3, scannerWithInts.nextInt()); Scanner scanner = new Scanner("There are five words here."); assertEquals("There", scanner.next()); assertEquals("are", scanner.next()); assertEquals("five", scanner.next()); assertEquals("words", scanner.next()); assertEquals("here.", scanner.next()); }
13
A test method to test num100s
public void testNum100s() { ControlFun cf = new ControlFun(); Scanner scanner0 = new Scanner("1 2 3"); Scanner scanner1 = new Scanner(" "); Scanner scanner3 = new Scanner(" "); assertEquals(0, cf.num100s(scanner0)); assertEquals(1, cf.num100s(scanner1)); assertEquals(3, cf.num100s(scanner3)); }
14
Answer public int num100s (Scanner scanner) { int result = 0;
while (scanner.hasNextInt()) { int next = scanner.nextInt(); if (next == 100) result++; } return result;
15
Careful using next too often!
These assertions should pass with the code that follows on the next slide @Test public void testSumOfNegs() { ControlFun cf = new ControlFun(); Scanner scanner0 = new Scanner("1 2 3"); Scanner scannerA = new Scanner("1 -2 3"); Scanner scannerB = new Scanner(" "); assertEquals(0, cf.sumOfNegatives(scanner0)); assertEquals(-2, cf.sumOfNegatives(scannerA)); assertEquals(-6, cf.sumOfNegatives(scannerB)); }
16
What's wrong with this method?
public int sumOfNegatives(Scanner scanner) { int result = 0; while (scanner.hasNextInt()) { if (scanner.nextInt() < 0) { result += scanner.nextInt(); } return result;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.