|
|
|
1000 Java Tips ebook
|
|
 

Free "1000 Java Tips" eBook is here! It is huge collection of big and small Java
programming articles and tips. Please take your copy here.
Take your copy of free "Java Technology Screensaver"!. |
|
The Java Lesson 10: for, while, and do-while statements
|
JavaFAQ Home » Java Lessons by Jon Huhtala

The Java Lesson 10
for,
while, and do-while statements
Overview
The ability to "loop" by executing one or more statements
repetitively is an important part of programming. Loops reduce the number of
statements a programmer must code and result in a smaller, more memory efficient
program. In Java, looping is performed using the for, while, and do-while
statements.
The for statement
for
(initialization;
condition; update)
{ statements; }
where
initialization -
represents the declaration of one or more local variables of the same data
type. When loop processing is complete, all such variables are destroyed.
condition -
represents a binary expression that, if true, allows the loop to continue. The condition
is tested prior to each iteration. If no longer true, processing continues at the first
statement after the closing brace of the for loop.
update -
represents one or more expressions to be executed at the end of each
iteration.
The braces may be omitted if the loop consists of a single
statement. This would constitute a "single statement for loop".
Example 1: Counting to 10 with a local variable
for (int i = 1;
i <= 10; i++) System.out.println(i);
This is a single statement for loop. Local variable i is initialized to 1 before
the first iteration and is used for loop control (its value determines when
the loop will end). As long as i is less than or equal to 10, looping will continue. At the
end of each iteration, i is incremented. Within each iteration, the current value of
i is displayed. When
the condition is no longer true, processing will continue at the next
statement in the program and variable i will be destroyed.
Example 2: Counting to 10 without a local variable
int i =
1; for (; i <= 10; i++)
System.out.println(i); System.out.println("Now i is " + i);
This loop generates the same output as the previous example.
Because loop control variable i is initialized outside the loop, it will not be destroyed
when the loop completes. Its final value (which will be 11) is displayed by
the statement after the loop. Notice that when no initialization expression
is coded, a place holding semicolon is still required.
Example 3: Coding multiple initialization and update
expressions
for (int i = 1,
j = 10; i <= 10; i++, j--) System.out.println(i + " x " + j + "
= " + (i * j));
This loop initializes two local variables, i and j, of the same data type
before the first iteration. At the end of each iteration, i is incremented and j is decremented. Within each
iteration, the product of i and j
is displayed. Notice that commas are used to separate multiple
initialization and update expressions.
Example 4: Coding no initialization, condition, or operation
expressions
for
(; System.out.println("I won't end");
This code is perfectly legal and results in an endless loop.
Endless loops happen and are sometimes used intentionally (such as a server
application waiting for clients to log-in). Be sure you know how to kill
one.
If running the above code under JBuilder 4, you may end the
program by clicking the red button in the message pane. In other development
environments you may need to close an execution window or simply press
Ctrl-C or Ctrl-Break on the keyboard. Consult
the documentation of your development environment for details.
public class App
{ public static void main(String[] args)
{
// This outer loop generates one row of the
multiplication // table during each
iteration.
for (int row = 1; row <= 9; row++)
{
// This inner loop generates one
column of the current row // of the
multiplication table during each
iteration.
for (int column = 1; column
<= 9; column++) {
// If
a one digit number is about to be displayed, preceed
it // with four spaces.
Otherwise, preceed it with three
spaces.
if ((row * column)
< 10) {
System.out.print("
");
} else
{
System.out.print("
");
}
// Display the
number.
System.out.print((row * column));
}
// End the current
line.
System.out.print("
"); }
} }
int i =
1; for (; i <= 10; i++);
System.out.println(i);
does not do what you initially think. The accidental semicolon
in the for statement
results in a loop that does nothing but increment i. When the loop ends, the current value of i will be displayed (11 in this
example).
Several other mistakes are common. Among them are:
-
Omitting the braces of a multiple
statement loop to create an accidental single statement loop.
-
Improper initialization of the
loop control variable. This can result in the condition expression being
initially false and a loop that has no iterations.
-
Changing the value of the loop
control variable within the body of the loop. The results can be
unpredictable.
The for
loop is both powerful and dangerous so use it with care.
The while statement
while
(condition) {
statements; }
where condition represents a binary expression that, if
true, permits an
iteration of the loop. If no longer true, processing continues at the first statement after the
closing brace of the while loop.
The braces may be omitted if the loop consists of a single
statement. This would constitute a "single statement while loop".
Example 1: Counting to 10 without a local variable
int i =
1; while (i <= 10) { System.out.println(i);
i++; }
Loop control variable i is initialized outside the loop. Prior to each iteration,
the value of i is
tested to determine if it is still less than or equal to 10. If so, the
current value of i is
displayed and i is
incremented. Otherwise processing will jump to the first statement after the
closing brace of the loop.
Example 2: An endless loop
while
(true) System.out.println("I won't end");
This is the preferred technique for launching an endless loop.
Example 3: A small program using nested while loops to generate a 9 x 9 multiplication
table
public class App
{ public static void main(String[] args)
{
// Initialize the row
number.
int row = 1;
//
This outer loop generates one row of the
multiplication // table during each
iteration.
while (row <= 9)
{
// Initialize the column
number.
int column =
1;
// This inner loop generates one
column of the current row // of the
multiplication table during each
iteration.
while (column <= 9)
{
// If a one digit number
is about to be displayed, preceed
it // with four spaces.
Otherwise, preceed it with three
spaces.
if ((row * column)
< 10) {
System.out.print("
");
} else
{
System.out.print("
");
}
// Display the
number.
System.out.print((row *
column));
// Increment the
column number.
column++;
}
// End the current
line.
System.out.print("
");
// Increment
the row number.
row++; }
} }
-
Accidental insertion of a
semicolon to create an empty loop.
-
Accidental omission of the braces
to turn a multiple statement loop into a single statement loop.
-
Improper initialization of the
loop control variable. This can result in the condition expression being
initially false and a loop that has no iterations.
-
Incorrect modification of the
value of the loop control variable within the body of the loop. The results
can be unpredictable.
The do-while statement
do {
statements; }
while
(condition);
where condition represents a binary expression that, if
true, permits another
iteration of the loop to be performed. If no longer true, processing continues at the next statement.
The braces may be omitted if the loop consists of a single
statement. This would constitute a "single statement do-while loop".
Example 1: Counting to 10 without a local variable
int i = 1; do
{ System.out.println(i); i++; } while (i <=
10);
Loop control variable i is initialized outside the loop. Within the loop, the
current value of i is
displayed and i is
incremented. At the end of each iteration, the value of i is tested to determine if
it is still less than or equal to 10. If so, the body of the loop is
repeated. Otherwise processing will jump to the next statement.
Example 2: An endless loop
do {
System.out.println("I won't end"); } while(true);
Example 3: A small program using nested do-while loops to generate a 9 x 9 multiplication table
public class App
{ public static void main(String[] args)
{
// Initialize the row
number.
int row = 1;
//
This outer loop generates one row of the
multiplication // table during each
iteration.
do
{
// Initialize the column
number.
int column =
1;
// This inner loop generates one
column of the current row // of the
multiplication table during each
iteration.
do
{
// If a one digit number
is about to be displayed, preceed
it // with four spaces.
Otherwise, preceed it with three
spaces.
if ((row * column)
< 10) {
System.out.print("
");
} else
{
System.out.print("
");
}
// Display the
number.
System.out.print((row *
column));
// Increment the
column number.
column++; } while (column <=
9);
// End the current
line.
System.out.print("
");
// Increment
the row number.
row++; } while (row <= 9);
} }
Example
Now that we have covered looping, it is possible to make our
programs more useful. The following program can be used to calculate and display
the area of one or more circles until the user decides to quit.
public class App
{ public static void main(String[] args) {
// Variables.
double radius;
double area; char again;
//
This loop will be repeated based upon the value of
again.
do {
//
Draw a separator, then prompt for and read the radius
from // the
user.
Utility.separator(40,
'~'); System.out.print("Enter radius:
"); radius =
Keyboard.readDouble();
// If the radius
is zero or negative, display an error
message. // Otherwise, calculate and display
the area of the circle.
if (radius <=
0) { System.out.println("Invalid
radius");
} else
{ area = Math.PI * radius *
radius; System.out.println("Area
is " + area);
}
// Draw a separator, then ask the user
if they want to do it // again and read
their reply.
Utility.separator(40,
'~'); System.out.print("Again? (Y/N):
"); again =
Keyboard.readChar();
// Repeat the loop
as requested.
} while (again == 'Y' || again ==
'y'); } }
Notes:
-
The radius and again variables hold data entered by the user.
The area variable is
calculated during processing.
-
The do-while
loop defines the processing of a single circle's area. It begins by drawing
a separator on the screen (for more information about my Utility class and its
methods, click here). It then
asks the user for the circle's radius and reads their reply. If the radius
is less than or equal to zero, an error message is displayed. Otherwise, the
circle's area is calculated and displayed.
-
At the bottom of the do-while loop, a separator is drawn and the user is asked if they
want to do it again. Their reply is read and used to determine if another
iteration of the loop is to be performed.
Review questions
-
Assuming all unseen code is
correct, which of the lines below would be part of the output generated by
executing the following statements? (choose two)
for (int i = 0; i <= 1; i++) { for (int j
= 0; j < 2; j++) { if (i == j)
{ } else
{ System.out.println("i = " + i + " , j =
" + j); } } }
-
i = 0, j = 0
-
i = 0, j = 1
-
i = 0, j = 2
-
i = 1, j = 0
-
i = 1, j = 1
-
i = 1, j = 2
-
Assuming all unseen code is
correct, what will be displayed by the following statements?
int i = 3; for (; i > 1; i--);
System.out.println("i = " + i);
-
the statements will not
compile
-
i = 3 i = 2
-
i = 3 i = 2 i = 1
-
i = 2 i = 1
-
i = 1
-
Which of the statements
below are equivalent to the following code?
for (int x = 5; x <= 50; x += 5)
System.out.print(" " + x);
-
byte x = 5; while (x <= 50) {
System.out.print(" " + x); x += 5; }
-
while (x <= 50) { byte x = 5;
System.out.print(" " + x); x += 5; }
-
while (byte x = 5; x <= 50) {
System.out.print(" " + x); x += 5; }
-
byte x = 5; while (x <= 50; x += 5) {
System.out.print(" " + x); }
-
while (byte x = 5; x <= 50; x += 5) {
System.out.print(" " + x); }
-
Assuming all unseen code is
correct, what will be displayed by the following statements?
int x = 0; do {
System.out.print(" " + x); x++; } while (x <=
3);
-
the statements will not
compile
-
the statements will
compile but nothing will display
-
0 1 2
-
0 1 2 3
-
0 1 2 3
4 Printer Friendly Page
Send to a Friend
..
Search here again if you need more info!
|
|
|