More loops Linag, Chpt 3, pp 82-99. The do-loop continue- condition ? loop-body statements next...
-
date post
21-Dec-2015 -
Category
Documents
-
view
224 -
download
2
Transcript of More loops Linag, Chpt 3, pp 82-99. The do-loop continue- condition ? loop-body statements next...
More loops
Linag, Chpt 3, pp 82-99
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
Using a do-loopUse 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 wayint 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>)
{
...
}
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.
Examplesfor (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 forint i = startValue;
while (i < endValue)
{
.....
i++;
}
for (int i=startValue; i<endValue; i++)
{
...
}
Flow of control in a for-loop
initialization
test guard
loop body
next statement
adjust
true
false
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 1st for-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 examplefor (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