Presentation is loading. Please wait.

Presentation is loading. Please wait.

More loops Horstmann Ch 7 continued.. The do-loop continue- condition ? loop-body statements next statement false true WHILE-LOOP continue- condition?

Similar presentations


Presentation on theme: "More loops Horstmann Ch 7 continued.. The do-loop continue- condition ? loop-body statements next statement false true WHILE-LOOP continue- condition?"— Presentation transcript:

1 More loops Horstmann Ch 7 continued.

2 The do-loop continue- condition ? loop-body statements next statement false true WHILE-LOOP continue- condition? loop-body statements next statement false true DO-LOOP

3 Using a do-loop Use this form when you want the loop body to be executed at least once int data; int sum = 0; String dataString; do { dataString = JOptionPane.showInputDialog(null,”enter number:”); data = Integer.parseInt(dataString); sum += data; } while (data != 0); JOptionPane.showMessageDialog(null,”Numbers sum to ”+sum);

4 Things to know about do-loops The loop body will always be executed one The first execution is done before the guard is checked The do-loop is nothing more than a small variant of the while-loop It is often useful for checking user input

5 When to use the do-loop? int sum; int data; String dataString; dataString=JOptionPane.showInputDialog(null,”enter number:”); data = Integer.parseInt(dataString); while(data != 0) { dataString = JOptionPane.showInputMessage(null,”enter number:”); data = Integer.parseInt(dataString); sum = sum + data; //could have used: sum += data; } JOptionPane.showMessageDialog(null,”Numbers sum to ”+sum);

6 A better way int data; int sum = 0; String dataString; do { dataString=JOptionPane.showInputDialog(null,”enter number:”); data = Integer.parseInt(dataString); sum += data; } while (data != 0); JOptionPane.showMessageDialog(null,”Numbers sum to ”+sum); We don’t have to get the first piece of data, add it to the sum variable, and then start the loop.

7 The for-loop The for-loop is another variant of the while loop Every for-loop can be written as a while loop Not every while-loop can be written as a for-loop Use a for-loop when you know exactly how many times the loop body should be executed

8 The for loop: Three things in one line for ( ; ; ) {... } 1.Initialization: (declare and) set a counter, to 0. This is done before everything else. 2.Guard: loop ends when this is false. This is tested before each pass through the loop. 3.Adjustment: e.g. increment a counter. This is done at the end of each pass through the loop.

9 Examples for (int i=0; i<10; i++) { JOptionPane.showMessageDialog(null, “ ”+i); } int i; for (i=10; i>0; i--) { JOptionPane.showMessageDialog(null, “ ”+i); }

10 From while to for int i = startValue; while (i < endValue) {..... i++; } for (int i=startValue; i<endValue; i++) {... }

11 Flow of control in a for-loop initialization test guard loop bodynext statement adjust true false

12 Rules and guidelines for “for” Counters can be declared and initialized in one go Never (never) change the value of the counter inside the loop body I mean it. Never do that! If the loop body is one statement only, you can omit the braces—but please don’t! Indent the code within the loop body..

13 Examples // Compute sum = 0.01 + 0.02 + … + 1;... double sum = 0; // Keep adding 0.01 to sum for (double i=0.01; i <= 1.0 ; i = i+0.01) { sum += i; } JOptionPane.showMessageDialog("The sum is " + sum);

14 Common error The 3 elements of the for-loop header are sparated by semi-colons, not commas! Do this: for (int i=0; i<10; i++) Not this: for (int i=0, i<10, i++) Keep your loops as simple as possible

15 Nesting for-loops Inside the loop body of a for-loop, we can put another for-loop Each time through the 1 st for-loop, we execute the 2 nd loop until its guard is false Handy for printing tables like this: 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4

16 Simple example for (int i=0; i<5; i++) { for (int j=0; j<3; j++) { System.out.print(i+“ ”); } System.out.println(); }

17 Nested Loops Create triangle pattern Loop through rows [] [][] [][][] [][][][] for (int i = 1; i <= n; i++) { // make triangle row }

18 for (int i = 1; i <= n; i++) { // make triangle row } for (int i = 1; i <= n; i++){ for (int j = 1; j <= i; j++) { r = r + "[]"; } r = r + "\n"; } Nested Loops Make triangle row is another loop Put one loop inside the other → Nested loops for (int j = 1; j <= i; j++) { r = r + "[]"; } r = r + "\n"; \\ “\n” means end of line

19 /** This class describes triangle objects that can be displayed with printed shapes */ public class Triangle{ private int width; /** Constructs a triangle. @param aWidth number of [] in the last row of triangle. */ public Triangle(int aWidth){ width = aWidth; } /** Computes a string representing the triangle. @return a string consisting of [] and newline characters */ public String toString(){ String r = ""; for (int i = 1; i <= width; i++){ for (int j = 1; j <= i; j++) { r = r + "[]"; } r = r + "\n"; } return r; }

20 File TriangleTester.java /** This program tests the Triangle class. */ public class TriangleTester{ public static void main(String[] args){ Triangle small = new Triangle(3); System.out.println(small.toString()); Triangle large = new Triangle(15); System.out.println(large.toString()); }

21 break-ing out of a loop Inside a loop body, the statement break; causes execution to leave the loop immediately. This is usually unnecessary, and shows that not enough though has gone into the development of a guard.

22 Example of break int sum = 0; int item = 0; while (item < 5) { item ++; sum += item; if (sum >= 6) break; } System.out.println("The sum is " + sum);

23 continue This keyword also stops interation of the loop body But...the program then starts the next iteration of the loop (testing the loop guard first) This is also usually unnecessary, and can be replaced by an if-statement.

24 Example of continue int sum = 0; int item = 0; while (item < 5) { item++; if (item == 2) continue; sum += item; } System.out.println("The sum is " + sum);

25 Object-oriented approach to averages /** Computes the average of a set of data values. */ public class DataSet{ private double sum; private double maximum; private int count; /** Constructs an empty data set. */ public DataSet(){ sum = 0; count = 0; maximum = 0; } /** Adds a data value to the data set @param x a data value */ public void add(double x){ sum = sum + x; if (count == 0 || maximum < x) { maximum = x; } count++; }

26 (continued) public double getAverage(){ if (count == 0) { return 0; } else { return sum / count; } } public double getMaximum(){ return maximum; } } // close the DataSet class Public class DataSestTester{ public static void main(String[] args){ DataSet myData = new DataSet(); String input; do { input = JOptionPane.showInputDialog(null, “number?”); myData.add(Double.parseDouble(input) ); } while(input.length() > 0); JOptionPane.showMessageDialog(null,“the average of those numbers is ”+ myData.getAverage() ); System.exit(0); }}


Download ppt "More loops Horstmann Ch 7 continued.. The do-loop continue- condition ? loop-body statements next statement false true WHILE-LOOP continue- condition?"

Similar presentations


Ads by Google