1 / 54

Objectives

Objectives. By the end of this lecture, students should: understand iteration statements understand the differences of for and while understand nested iteration be able to write simple code with iterations Reading: Savitch, Sec. 3.3. The while Statement.

benjamin
Download Presentation

Objectives

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. Objectives • By the end of this lecture, students should: • understand iteration statements • understand the differences of for and while • understand nested iteration • be able to write simple code with iterations • Reading: Savitch, Sec. 3.3

  2. The while Statement • Implements the repetition in an algorithm • Repeatedly executes a block of statements • Tests a condition (Boolean expression) at the start of each iteration • Terminates when condition becomes false (zero)

  3. Example:averaging numbers • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count

  4. Example:averaging Iteration Control • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count Initialize Check condition Update

  5. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count

  6. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count

  7. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count

  8. Aside: Keyboard Input • Java 5 provides a convenient way for simple keyboard input, the Scanner class. • you must “import java.util.Scanner;”This makes the Scanner class known to your program.More about this later… • You create a new scanner object for a particular input stream (“channel”):Scanner console = new Scanner(System.in); • new values can then be read from the Scanner object using • console.nextInt (Integer) • console. nextFloat (Float) • console. nextLine (String) • etc (see Java API doc at Sun’s web site)

  9. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count Same as: count = count + 1; Decrement: count--; (Savitch, p 30-33)

  10. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count Other contracted forms: +=, -=, etc we could write: sum += console.nextInt();

  11. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count The whole block to be repeated is marked by braces { … } unless it is a single statement.

  12. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count Don’t forget a cast is required to obtain a float division and result. What would happen without it?

  13. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  14. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  15. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  16. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  17. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  18. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } }

  19. Example:averaging import java.util.Scanner; public class Test { Scanner console = new Scanner(System.in); public float avg(int max) { int count=0; int sum=0; while (count < max) { int newInt = console.nextInt(); sum = sum + newInt; count ++; } return sum/(float)count; } } The loop now terminates as the condition is false and the next statement after the loop is executed (here: return).

  20. Common Mistakes in while – “one liners” while (num < minimum) num = console.nextInt(); System.out.println(“Number must be greater than “ + minimum); System.out.println(“Please try again.”); while (num < minimum) { num = console.nextInt(); } System.out.println(“Number must be greater than “ + minimum); System.out.println(“Please try again.”);

  21. Common Mistakes in while – “one liners” while (num < minimum) num = console.nextInt(); System.out.println(“Number must be greater than “ + minimum); System.out.println(“Please try again.”); while (num < minimum) { num = console.nextInt(); System.out.println(“Number must be greater than “ + minimum); System.out.println(“Please try again.”); }

  22. Common Mistakes in whileextra semi-colon; while (num < minimum) ; { num = console.nextInt(); System.out.println(“Number must be greater than “ + minimum); System.out.println(“Please try again.”); } Marks the end of the while-block -- usual cause of infinite loops

  23. The for Statement • Form of loop which allows for initialization and iteration control • Syntax: for ( initialization; condition; update) { instruction block } Careful! A semi-colon here marks the end of the instruction block!

  24. Example:averaging • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count public float averageWithFor(int max) { int count; int sum=0; for (count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; }

  25. Example:averaging • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count public float averageWithFor(int max) { int count; int sum=0; for (count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Initialize

  26. Example:averaging Test • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count public float averageWithFor(int max) { int count; int sum=0; for (count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Test is performed before the body

  27. Example:averaging • Read in numbers, add them, and • return their average • max is number of numbers to read • set sum to 0 • set count to 0 • while (count < max) • { • input nextNum • add nextNum to sum • add 1 to count • } • return sum/count public float averageWithFor(int max) { int count; int sum=0; for (count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Update Update is performed after the body

  28. while and for • import java.util.Scanner; • public class Test • { • Scanner console = new Scanner(System.in); • public float averageWhile(int max) • { • int count=0; • int sum=0; • while (count < max) • { int newInt = • console.nextInt(); • sum = sum + newInt; • count ++; • } • return sum/(float)count; • } • } public float averageFor(int max) { int count; int sum=0; for ( count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; }

  29. while and for • import java.util.Scanner; • public class Test • { • Scanner console = new Scanner(System.in); • public float averageWhile(int max) • { • int count=0; • int sum=0; • while (count < max) • { int newInt = • console.nextInt(); • sum = sum + newInt; • count ++; • } • return sum/(float)count; • } • } public float averageFor(int max) { int count; int sum=0; for ( count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Initialize Initialize

  30. while and for • import java.util.Scanner; • public class Test • { • Scanner console = new Scanner(System.in); • public float averageWhile(int max) • { • int count=0; • int sum=0; • while (count < max) • { int newInt = • console.nextInt(); • sum = sum + newInt; • count ++; • } • return sum/(float)count; • } • } public float averageFor(int max) { int count; int sum=0; for ( count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Test Test

  31. while and for • import java.util.Scanner; • public class Test • { • Scanner console = new Scanner(System.in); • public float averageWhile(int max) • { • int count=0; • int sum=0; • while (count < max) • { int newInt = • console.nextInt(); • sum = sum + newInt; • count ++; • } • return sum/(float)count; • } • } public float averageFor(int max) { int count; int sum=0; for ( count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } Update Update

  32. For / While Equivalence • Every For loop can always be rewritten as a while loop • …and vice versa • For loops are typically preferred for any form of “counting” • (I.e. where the number of iterations is known)

  33. Local Loop Variables • You can declare a new counter variable locally for the loop body. Thjs is done in the for initalization (good style!) public float averageWithFor(int max) { int count; int sum=0; for (count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)count; } public float averageWithFor(int max) { int sum=0; for (int count=0; count < max; count++) { int newInt = console.nextInt(); sum = sum + newInt; } return sum/(float)max; }

  34. do-while • There is a variant of the while statement, the do-while statement • The only difference to the normal while is, when the test is executed • while: before loop body • do-while: after loop body • A do-while body will always be executed at least once. do { int newInt = console.nextInt(); sum = sum + newInt; count ++; } while (count < max)

  35. The break / continue Statements • Implements the "exit loop" primitive. • Break causes flow of control to leave a loop block (while or for) immediately and continue after the loop. • Continue ends only the current loop iteration and transfers the control back to the update expression (potentially entering the next iteration of the loop). • Style • In almost all cases using break and continue is in bad style. They should only be used to terminate a loop in abnormal situations.

  36. Example reciprocal public void reciprocal() { while (true) { float newFloat = console.nextFloat(); if (newFloat==0) break; else System.out.println( 1/newFloat); } System.out.println("You entered Zero!"); } • Print out the reciprocals of • numbers entered. Quit when 0 • is entered • loop • { • input nextNum • if (nextNum is 0) • { • exit loop • } • else • { • output 1/nextNum • } • }

  37. Example reciprocal public void reciprocal() { while (true) { float newFloat = console.nextFloat(); if (newFloat==0) break; else System.out.println( 1/newFloat); } System.out.println("You entered Zero!"); } “while (True)” infinite loop • Print out the reciprocals of • numbers entered. Quit when 0 • is entered • loop • { • input nextNum • if (nextNum is 0) • { • exit loop • } • else • { • output 1/nextNum • } • }

  38. Infinite Loops while ( true ) { ...etc...etc...etc... } Use an: if ( condition ) { break; } statement to break the loop for ( ; true ; ) { ...etc...etc...etc... } for ( ; ; ) { ...etc...etc...etc... }

  39. Example Factorization • Write a program which prints out the prime factorization of a number (treat 2 as the first prime) • For example, • on input 6, desired output is: 2 3 • " " 24, " " : 2 2 2 3 • " " 14, " " : 2 7 • " " 23, " " : 23 (23 is prime)

  40. Algorithm input n set factor to 2

  41. Algorithm (cont) input n set factor to 2 while(some factor yet to try) { }

  42. Algorithm (cont) input n set factor to 2 while(some factor yet to try) { if (n is divisible by factor) { output factor set n to n / factor } }

  43. Algorithm (cont) input n set factor to 2 while(some factor yet to try) { if (n is divisible by factor) { output factor set n to n / factor } else { increment factor } }

  44. Example: factorize input n set factor to 2 while(some factor yet to try) { if (n is divisible by factor) { output factor set n to n / factor } else { increment factor } } public void factorize(int number) { int factor=2; while (number > 1) { if (number % factor == 0) { System.out.println(factor); number = number / factor; } else factor++; } }

  45. Iterating over a String (For) • Many string algorithms require iteration over the characters in a string. The for loop is ideally suited to do this. • The characters in a string can be accessed by position index using the charAt method. • Indices run from 0 to length -1! • char charAt(int index) • The length of the string can be obtained with the length method • int length()

  46. Example: CountConsonantsAndVowels • Count the number of consonants and the number of vowels in a file • Non-alphabetic characters should notbe counted

  47. Algorithm: count consonants and vowels input String set consonantCount to 0 set vowelCount to 0 loop over all characters in the string { set ch as next character in string if (ch is a vowel) { increment vowelCount } else if (ch is a consonant) { increment consonantCount } } output consonantCount, vowelCount

  48. input String set consonantCount to 0 set vowelCount to 0 loop over all characters in the string { set ch as next character in string if (ch is a vowel) { increment vowelCount } else if (ch is a consonant) { increment consonantCount } } output consonantCount, vowelCount public void stringCount() { String s = console.nextLine(); int vowels=0; int consonants=0; for (int i=0; i< s.length(); i++) { char c = s.charAt(i)); c = Character.toLowerCase( c ); if (Character.isLetter( c )) if (c=='a' || c=='e' || c=='i' || c =='o' || c=='u') vowels ++; else consonants++; }// for loop ends here System.out.println(s+" has”+ vowels+" Vowels and "+ consonants+" Consonants."); } Note the use of the service functions in the Character class. Try to find these in the API definition on the web!

  49. Iterating over a String (While) • Re-write the stringCount Method with a while loop instead of a for loop

  50. Nested Loops • Loops can be placed inside other loops • The break statement applies to the innermost enclosing while or for statement

More Related