1 / 67

Zhen Jiang Dept. of Computer Science West Chester University West Chester, PA 19383

CSC240 Computer Science III. Zhen Jiang Dept. of Computer Science West Chester University West Chester, PA 19383 zjiang@wcupa.edu. Loop. Smart if-decision making, smart program work, talent programmer Research experience (REU) - click on this link

peterl
Download Presentation

Zhen Jiang Dept. of Computer Science West Chester University West Chester, PA 19383

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. CSC240 Computer Science III Zhen Jiang Dept. of Computer Science West Chester University West Chester, PA 19383 zjiang@wcupa.edu

  2. Loop • Smart if-decision making, smart program work, talent programmer • Research experience (REU) - click on this link http://www.cs.wcupa.edu/~zjiang/Matlabprogramming.pptx • Temperature/humidity detection every second • A repetition process for the 7x24 hours seamless surveillance • Needs a computer support to REPEAT …

  3. While loop • Format & Logic, page 197, Figure 4-1. • Sample, code 4-3, page 198.

  4. <initialization>; while (<test>) { <body>; }

  5. Do-while loop • Format, page 208 • Logic, page 209, Figure 4-6. • Sample, code 4-6, page 209.

  6. How does this differ from the while loop? • The controlled <statement(s)> will always execute the first time, regardless of whether the <test> is true or false.

  7. For loop • Format, page 212, Figure 4-7. • Logic, page 212, Figure 4-8. • Sample, code 4-7, page 213.

  8. for (<init>; <test>; <update>) { <body>; }

  9. Why need to repeat this?

  10. Exercise • population  • http://www.cs.wcupa.edu/~zjiang/6billion.exe • TV purchase • http://www.cs.wcupa.edu/~zjiang/tv563.exe • 1+2+4+8+... • http://www.cs.wcupa.edu/~zjiang/1_2_4.exe • 1+2+3+4+...+99 • http://www.cs.wcupa.edu/~zjiang/1to99.exe

  11. Summary Body first, and then event change/update

  12. Initialization, test, and body, and execution results of loop • Code: for (int i = 1; i <= 4; i++) { System.out.println(i + " squared is " + (i * i)); } Output: 1 squared is 1 2 squared is 4 3 squared is 9 4 squared is 16 1st iteration? 2nd iteration? 3rd iteration? …

  13. Exercises • http://www.cs.wcupa.edu/~zjiang/141_ex11.pdf

  14. Variations The initial and final values for the loop counter/event variable can be arbitrary expressions: Example: for (int i = -3; i <= 2; i++) { System.out.println(i); } Output: -3 -2 -1 0 1 2 Example: for (int i = 1 + 3 * 4; i <= 5248 % 100; i++) { System.out.println(i + " squared is " + (i * i)); }

  15. The update can be a -- (or any other operator). Caution: This requires changing the test from <= to >= . System.out.println("T-minus"); for (int i = 3; i >= 1; i--) { System.out.println(i); } System.out.println("Blastoff!"); Output: T-minus 3 2 1 Blastoff!

  16. What if we wanted the output to be the following? T-minus 3 2 1 Blastoff! System.out.print prints the given output without moving to the next line. System.out.print("T-minus "); for (int i = 3; i >= 1; i--) { System.out.print(i + ""); } System.out.println("Blastoff!");

  17. When controlling a single statement, the {} braces are optional. for (int i = 1; i <= 6; i++)‏ System.out.println(i + " squared is " + (i * i)); This can lead to errors if a line is not properly indented. for (int i = 1; i <= 3; i++)‏ System.out.println("This is printed 3 times"); System.out.println("So is this... or is it?"); Output: This is printed 3 times This is printed 3 times This is printed 3 times So is this... or is it? Moral: Always use curly braces and always use proper indentation.

  18. Extra semicolon in a loop (P218). int i; for (i = 1; i <= 6; i++)‏; System.out.println(i + " squared is " + (i * i)); Output: 7 squared is 49 Comman in a loop (P220). int i, sum; for (i = 1, sum = 0; i <= 10; i++)‏ sum = sum + i * i; System.out.println("Result is " + sum); Output: 385 int sum; for (int i=0, sum; …

  19. Invalidation: Loops that never execute. for (int i = 10; i < 5; i++) { System.out.println("How many times do I print?"); } ERROR: Loop tests that never fail. A loop that never terminates is called an infinite loop. for (int i = 10; i >= 1; i++) { System.out.println("Runaway Java program!!!"); }

  20. Loops that go on… forever while (true) { <statement(s)>; } If it goes on forever, how do you stop?

  21. break statement: Immediately exits a loop (for, while, do/while). Example: while (true) { <statement(s)>; if (<test>) { break; } <statement(s)>; } Why is the break statement in an if statement?

  22. Sentinel loop using break: Scanner console = new Scanner(System.in); int sum = 0; while (true) { System.out.print("Enter a number (-1 to quit): "); int inputNumber = console.nextInt(); if (inputNumber == -1) { // don't add -1 to sum break; } sum += inputNumber; // inputNumber != -1 here } System.out.println("The total was " + sum);

  23. Special case: If a variable is declared in the <initialization> part of a for loop, its scope is the for loop. public static void main(String [] args) { int x = 3; int i; for (i = 1; i <= 10; i++) { System.out.println(x); } // i no longer exists here } // x ceases to exist here x's scope i’s scope

  24. ERROR: Using a variable outside of its scope. public static void main(String[] args) { for (int i = 1; i <= 10; i++) { int y = 5; System.out.println(y); } System.out.println(i); // illegal System.out.println(y); // illegal }

  25. COMMON ERROR: Using the wrong loop counter variable. But barely possible when you develop code with our process. What is the output of the following piece of code? for (int i = 1; i <= 10; i++) { for (int j = 1; i <= 5; j++) { System.out.print(j); } System.out.println(); } What is the output of the following piece of code? for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 5; i++) { System.out.print(j); } System.out.println(); }

  26. Development process • http://www.cs.wcupa.edu/~zjiang/LoopDevelopment.htm

  27. Controlling Number of Loop Iterations If the number of iterations is known before the loop starts, the loop is called a count-controlled loop. Counter =0, counter++, counter <number Counter = 1, counter++, counter <=number Use for loop for an easy development.

  28. Mapping iterations to counter values Suppose that we have the following loop: for (int count = 0; count < 49; count++) { ... } What statement could we write in the body of the loop that would make the loop print the following output? 0 2 4 6 8 … Answer: for (int count = 0; count < 49; count++) { System.out.print(2 * count + " "); }

  29. Now consider another loop of the same style: for (int count = 0; count < 49; count++) { ... } What statement could we write in the body of the loop that would make the loop print the following output? 3 5 7 9 11 Answer: for (int count = 0; count < 49; count++) { System.out.print(2 * count + 3 + " "); }

  30. What statement could we write in the body of the loop that would make the loop print the following output? 2 7 12 17 22 To find the pattern, it can help to make a table. Each time count goes up by 1, the number should go up by 5. But count * 5 is too big by 3, so we must subtract 3. count number to print count * 5 count * 5 - 3 1 2 5 2 2 7 10 7 3 12 15 12 4 17 20 17 5 22 25 22

  31. count (x)‏ number to print (y)‏ 1 2 2 7 3 12 4 17 5 22

  32. Caution: This is algebra, not assignment! Recall: slope-intercept form (y = mx + b)‏ Slope is defined as “rise over run” (i.e. rise / run). Since the “run” is always 1 (we increment along x by 1), we just need to look at the “rise”. The rise is the difference between the y values. Thus, the slope (m) is the difference between y values; in this case, it is +5. To compute the y-intercept (b), plug in the value of y at x = 1 and solve for b. In this case, y = 2. y = m * x + b 2 = 5 * 1 + b Then b = -3 So the equation is y = m * x + b y = 5 * x – 3 y = 5 * count - 3 count (x)‏ number to print (y)‏ 1 2 2 7 3 12 4 17 5 22

  33. Algebraically, if we always take the value of y at x = 1, then we can solve for b as follows: y = m * x + b y1 = m * 1 + b y1 = m + b b = y1 – m In other words, to get the y-intercept, just subtract the slope from the first y value (b = 2 – 5 = -3)‏ This gets us the equation y = m * x + b y = 5 * x – 3 y = 5 * count – 3 (which is exactly the equation from the previous slides)‏

  34. What statement could we write in the body of the loop that would make the loop print the following output? 17 13 9 5 1 Let's create the loop table together. Each time count goes up 1, the number should ... But this multiple is off by a margin of ... count number to print count * -4 count * -4 + 21 1 17 -4 17 2 13 -8 13 3 9 -12 9 4 5 -16 5 1 5 1 -20

  35. Coding (different from execution check): n=keyboard.nextInt(); // try 6! for (int i = 1; i <= n; i++) { System.out.print("*"); } System.out.println(); Output: ****** What is the body? Counter-controlled loop?

  36. More complicate case: n=keyboard.nextInt(); // try 6! for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { System.out.print("*"); } System.out.println(); } Output: ****** ****** ****** ****** ****** ****** What is the body? Counter-controlled loop?

  37. Code: n=keyboard.nextInt(); // try 5! for (int i = 1; i <= n; i++) { for (int j = 1; j <= 10; j++) { System.out.print( (i * j) + " "); } System.out.println(); } Output: 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 What is the body? Counter-controlled loop? Initialization and body detail?

  38. How to confirm the initialization correct? On preparing the 1st iteration … How to ensure the detail of the body? A consistent view of 1st, 2nd, 3rd iterations … Map of the counter value to the iteration expression …

  39. Code: n=keyboard.nextInt(); // try 6! for (i = 1; i<=n; i++) System.out.print(“*”); System.out.println(“”); for (i = 1; i <= n-2; i++) { System.out.print(“*”); for (int j = 1; j <= n-2; j++) System.out.print(“”); System.out.println(“*”); } for (i = 1; i<=n; i++) System.out.print(“*”); System.out.println(“”); Output: ****** * * * * * * * * ****** What is the body? Counter controlled loop

  40. Code: n=keyboard.nextInt(); // try 6! for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print("*"); } System.out.println(); } Output: * ** *** **** ***** ****** i * each line!

  41. Code: n=keyboard.nextInt(); // try 6! for (int i = 1; i <= n; i++) { for (int j = 1; j <= i; j++) { System.out.print(i); } System.out.println(); } Output: 1 22 333 4444 55555 666666 How many numbers each line? What are they?

  42. Code: n=keyboard.nextInt(); // try 5! for (int i = 1; i <= n; i++) { for (int j = 1; j <= (n - i); j++) { System.out.print(" "); } for (int k = 1; k <= i; k++) { System.out.print(i); } System.out.println(); } Output: 1 22 333 4444 55555 Space and numbers?

  43. Otherwise (unknown or unclear), the loop is called a event-controlled loop. Use a while loop or a do-while loop for an easy checkpoint development. Asking the user before each iteration if it is time to end the loop is called the ask-before-iterating technique. Appropriate status update (or event initializing) for a sequence of iterations Controlling Event of Loop Iterations

  44. Finds and prints a number's first factor other than 1: int n = keyboard.nextInt(); // try 91 int f = 2; while (n % f != 0) { f++; } System.out.println("First factor:" + f); Sample run: First factor:7 Body: exploring the factor. When/what to stop the loop? n% f = = 0 divisible! The range of f? Initialization of f? The change of f?

  45. Write a program that will repeatedly prompt the user to type a number until the user types a non-negative number, then square it. Example log: Type a non-negative integer: -5 Invalid number, try again: -1 Invalid number, try again: -235 Invalid number, try again: -87 Invalid number, try again: 11 11 squared is 121

  46. System.out.print("Type a non-negative integer: "); int n = keyboard.nextInt(); while (n < 0) { System.out.print("Invalid number, try again: "); n = keyboard.nextInt(); } int square = n * n; System.out.println(n + " squared is " + square); Notice that the number variable had to be declared outside the while loop in order to remain in scope. Body: trying different value of n. When/what to stop the loop? n>= 0 non-negative! The range of n? -> any (since n<0) Initialization of n? The change of n?

More Related