1 / 16

Determinate Loop Pattern, Java's for Statement, and Scanner objects

Determinate Loop Pattern, Java's for Statement, and Scanner objects 2 nd part of Chapter 6: Repetition. 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).

Télécharger la présentation

Determinate Loop Pattern, Java's for Statement, and Scanner objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Determinate Loop Pattern, Java's forStatement, 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

  3. 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

  4. General FormThe 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.

  5. Flow chart view of a for loop Initial statement True False Loop test Iterative part update-step

  6. 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);

  7. 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); • }

  8. 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;

  9. Other Assignment Operators • Java has several assignment operators in addition to=(-=and+=) j -= 2;is the equivalent ofj = 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; • System.out.print("Enter a number: "); • x = keyboard.nextInt(); // user enters 8 • sum += x;

  10. 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

  11. These assertions pass @Test publicvoidshowScanner() { Scanner scannerWithInts = newScanner("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()); }

  12. A test method to test num100s @Test publicvoidtestNum100s() { ControlFuncf = newControlFun(); Scanner scanner0 = newScanner("1 2 3"); Scanner scanner1 = newScanner("4 100 2 5"); Scanner scanner3 = newScanner("100 100 2 -3 5 3 2 -100 100"); assertEquals(0, cf.num100s(scanner0)); assertEquals(1, cf.num100s(scanner1)); assertEquals(3, cf.num100s(scanner3)); }

  13. Answer publicintnum100s (Scanner scanner) { intresult = 0; while(scanner.hasNextInt()) { intnext = scanner.nextInt(); if(next == 100) result++; } returnresult; }

  14. Careful using next too often! • These assertions should pass with the code that follows on the next slide @Test publicvoidtestSumOfNegs() { ControlFun cf = newControlFun(); Scanner scanner0 = newScanner("1 2 3"); Scanner scannerA = newScanner("1 -2 3"); Scanner scannerB = newScanner("-4 1 -2 3"); assertEquals(0, cf.sumOfNegatives(scanner0)); assertEquals(-2, cf.sumOfNegatives(scannerA)); assertEquals(-6, cf.sumOfNegatives(scannerB)); }

  15. What's wrong with this method? publicintsumOfNegatives(Scanner scanner) { intresult = 0; while(scanner.hasNextInt()) { if(scanner.nextInt() < 0) { result += scanner.nextInt(); } } returnresult; }

More Related