Easy to Learn Java: Programming Articles, Examples and Tips

Start with Java in a few days with Java Lessons or Lectures

Home

Code Examples

Java Tools

More Java Tools!

Java Forum

All Java Tips

Books

Submit News
Search the site here...
Search...
 
Search the JavaFAQ.nu
1000 Java Tips ebook

1000 Java Tips - Click here for the high resolution copy!1000 Java Tips - Click here for the high resolution copy!

Java Screensaver, take it here

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 Go to all tips in Java Lessons by Jon Huhtala


Bookmark and Share
All Java Lessons contents page | Java Lesson 1 | Java Lesson 2 | Java Lesson 3 | Java Lesson 4 | Java Lesson 5 | Java Lesson 6 | Java Lesson 7 | Java Lesson 8 | Java Lesson 9 | Java Lesson 10 | Java Lesson 11 | Java Lesson 12 | Java Lesson 13 | Java Lesson 14 | Java Lesson 15 | Java Lesson 16 | Java Lesson 17 | Java Lesson 18 | Java Lesson 19 | Java Lesson 20 | Java Lesson 21 | Java Lesson 22 | Java Lesson 23 | Java Lesson 24 | Java Lesson 25 | Java Lesson 26 | Java Lesson 27 | Java Lesson 28 | Java Lesson 29 | Java Lesson 30 | Java Lesson 31 | Java Lesson 32 | Java Lesson 33 | Java Lesson 34 | Java Lesson 35 | Java Lesson 36 | Java Lesson 37 | Java Lesson 38 | Java Lesson 39 | Java Lesson 40 | Java Lesson 41 | Java Lesson 42 | Java Lesson 43 | Java Lesson 44 | Java Lesson 45 | Java Lesson 46

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

  • Is useful when the number of passes (iterations) can be predetermined

  • Has the general syntax

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".

  • Is best learned by example.

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 (;Wink
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.

  • Can be nested. For example, the following program generates a simple 9 x 9 multiplication table:

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(" ");
}
}
}

  • Can trap sloppy programmers. For example,

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:

  1. Omitting the braces of a multiple statement loop to create an accidental single statement loop.

  2. Improper initialization of the loop control variable. This can result in the condition expression being initially false and a loop that has no iterations.

  3. 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

  • Defines a block of code to be executed as long as a particular condition is met. The condition is tested prior to each iteration.

  • Has the general syntax

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".

  • Does not provide for initialization of variables or automatic update expressions. In spite of these limitations, a while loop can be used in place of nearly any for loop as shown by these examples:

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++;
}
}
}

  • Is prone to the same type of errors as the for loop. Such as

  1. Accidental insertion of a semicolon to create an empty loop.

  2. Accidental omission of the braces to turn a multiple statement loop into a single statement loop.

  3. Improper initialization of the loop control variable. This can result in the condition expression being initially false and a loop that has no iterations.

  4. 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

  • Defines a block of code to be executed as long as a particular condition is met. The condition is tested at the end of each iteration. You are always guaranteed at least one pass through a do-while loop.

  • Has the general syntax

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".

  • Can be used in place of nearly any while loop as shown by these examples:

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);
}
}

  • Is less likely to result in programmer errors than either the for loop or while loop. Because of its syntax, the compiler will detect errors involving the omission of braces and accidental semicolons.

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:

  1. The radius and again variables hold data entered by the user. The area variable is calculated during processing.

  2. 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.

  3. 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

  1. 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);
}
}
}

  1. i = 0, j = 0

  2. i = 0, j = 1

  3. i = 0, j = 2

  4. i = 1, j = 0

  5. i = 1, j = 1

  6. i = 1, j = 2

  1. 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);

  1. the statements will not compile

  2. i = 3
    i = 2

  3. i = 3
    i = 2
    i = 1

  4. i = 2
    i = 1

  5. i = 1

  1. Which of the statements below are equivalent to the following code?

    for (int x = 5; x <= 50; x += 5)
    System.out.print(" " + x);

  1. byte x = 5;
    while (x <= 50) {
    System.out.print(" " + x);
    x += 5;
    }

  2. while (x <= 50) {
    byte x = 5;
    System.out.print(" " + x);
    x += 5;
    }

  3. while (byte x = 5; x <= 50) {
    System.out.print(" " + x);
    x += 5;
    }

  4. byte x = 5;
    while (x <= 50; x += 5) {
    System.out.print(" " + x);
    }

  5. while (byte x = 5; x <= 50; x += 5) {
    System.out.print(" " + x);
    }

  1. 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);

  1. the statements will not compile

  2. the statements will compile but nothing will display

  3. 0 1 2

  4. 0 1 2 3

  5. 0 1 2 3 4


 Printer Friendly Page  Printer Friendly Page
 Send to a Friend  Send to a Friend

.. Bookmark and Share

Search here again if you need more info!
Custom Search



Home Code Examples Java Forum All Java Tips Books Submit News, Code... Search... Offshore Software Tech Doodling

RSS feed Java FAQ RSS feed Java FAQ News     

    RSS feed Java Forums RSS feed Java Forums

All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest 1999-2006 by Java FAQs Daily Tips.

Interactive software released under GNU GPL, Code Credits, Privacy Policy