230 likes | 388 Views
More loops. Linag, Chpt 3, pp 82-99. loop-body statements. false. continue-condition?. true. true. continue-condition?. loop-body statements. false. next statement. next statement. The do -loop. DO-LOOP. WHILE-LOOP. Using a do -loop.
E N D
More loops Linag, Chpt 3, pp 82-99
loop-body statements false continue-condition? true true continue-condition? loop-body statements false next statement next statement The do-loop DO-LOOP WHILE-LOOP
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);
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
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);
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.
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
The for loop: Three things in one line for ( <initialization>; <guard>; <adjustment>) { ... } • Initialization: (declare and) set a counter, to 0. This is done before everything else. • Guard: loop ends when this is false. This is tested before each pass through the loop. • Adjustment: e.g. increment a counter. This is done at the end of each pass through the loop.
Examples for (int i=0; i<10; i++) { JOptionPane.showMessageDialog(null, “ ”+i); } int i; for (i=10; i>0; i--) { JOptionPane.showMessageDialog(null, “ ”+i); }
From while to for int i = startValue; while (i < endValue) { ..... i++; } for (int i=startValue; i<endValue; i++) { ... }
adjust test guard loop body next statement Flow of control in a for-loop initialization false true
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..
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);
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
Nesting for-loops • Inside the loop body of a for-loop, we can put another for-loop • Each time through the 1stfor-loop, we execute the 2nd 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
Simple example for (int i=0; i<5; i++) { for (int j=0; j<3; j++) { System.out.print(i+“ ”); } System.out.println(); }
Sample problem, p. 91 Multiplication table --------------------------------- | 1 2 3 4 5 6 7 8 9 1 | 1 2 3 4 5 6 7 8 9 2 | 2 4 6 8 10 12 14 16 18 3 | 3 6 9 12 15 18 21 24 27 4 | 4 8 12 16 20 24 28 32 36 5 | 5 10 15 20 25 30 35 40 45
Nested for-loop example p. 91 // Print table body for (int i=1; i<=9; i++) { output += i + " | "; for (int j=1; j<=9; j++) { // Display the product and align properly if (i*j < 10) output += " " + i*j; else output += " " + i*j; } output += “\n”; // the special character “\n” // represents the end of a line JOptionPane.showMessageDialog(null, output); }
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.
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);
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.
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);
Case studies • Study cases 3.7, 3.8 and 3.9, • Liang, pp 99..106 • Compile and run the programs • Study the logic of flow control • Then go outside and do something else