The JavaTM Tutorial
Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Trail: Learning the Java Language
Lesson: Language Basics

The for Statement

The for (in the glossary) statement provides a compact way to iterate over a range of values. The for statement has a general form and, as of 5.0, an enhanced form that you can use when performing simple iterations over arrays and collections. The general form of the for statement can be expressed like this:
for (initialization; termination; increment) {
    statement(s)
}
The initialization is an expression that initializes the loop — it's executed once at the beginning of the loop. The termination expression determines when to terminate the loop. When the expression evaluates to false, the loop terminates. Finally, increment is an expression that gets invoked after each iteration through the loop. All these components are optional. In fact, to write an infinite loop, you omit all three expressions:
for ( ; ; ) {    //infinite loop
    ...
}

Often for loops are used to iterate over the elements in an array or the characters in a string. The following sample, ForDemo (in a .java source file), uses a for statement (shown in boldface) to iterate over the elements of an array and to print them:

public class ForDemo {
    public static void main(String[] args) {
        int[] arrayOfInts = { 32, 87, 3, 589, 12, 
                              1076, 2000, 8, 622, 127 };

        for (int i = 0; i < arrayOfInts.length; i++) {
            System.out.print(arrayOfInts[i] + " ");
        }
        System.out.println();
    }
}
The output of the program is: 32 87 3 589 12 1076 2000 8 622 127.

Notice that you can declare a local variable within the initialization expression of a for loop. The scope of this variable extends from its declaration to the end of the block governed by the for statement so it can be used in the termination and increment expressions as well. If the variable that controls a for loop is not needed outside of the loop, it’s best to declare the variable in the initialization expression. The names i, j, and k are often used to control for loops; declaring them within the for loop initialization expression limits their life span and reduces errors.

Iterating over Collections and Arrays with Enhanced For

In 5.0 a new kind of for statement was created especially for collections and arrays. Here's some code, taken from ForEachDemo (in a .java source file), that does the same thing as the previous code snippet (which was taken from ForDemo (in a .java source file)).
public class ForEachDemo {
    public static void main(String[] args) {
        int[] arrayOfInts = { 32, 87, 3, 589, 12,
                              1076, 2000, 8, 622, 127 };

        for (int element : arrayOfInts) {
            System.out.print(element + " ");
        }
        System.out.println();
    }
}
You can read the for statement in the preceding snippet like this: For each int element in arrayOfInts...

Where the enhanced for statement really shines is when it's used with collections (classes that implement the Collection (in the API reference documentation) interface). Here's an old-fashioned for statement that iterates through a collection:

//This is ugly. Avoid it by using enhanced for!
void cancelAll(Collection<TimerTask> c) {
    for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
        i.next().cancel();
}
Don't worry about the strange <TimerTask> bit of code for now. You'll learn about it and about collections in Generics (in the Learning the Java Language trail) and Collections (in the Learning the Java Language trail), respectively. The point is you can avoid it in the for loop by using the enhanced for statement, like this:
//This is much prettier.
void cancelAll(Collection<TimerTask> c) {
    for (TimerTask t : c)
        t.cancel();
}
When you nest iterators, the enhanced for statement is even nicer because you can avoid more unnecessary code. For example:
for (Suit suit : suits) {
    for (Rank rank : ranks)
        sortedDeck.add(new Card(suit, rank));
}
The enhanced for statement doesn't work everywhere, unfortunately. If you need access to array indexes, for example, enhanced for won't work for you. However, using enhanced for statements wherever possible can reduce certain kinds of bugs, and it makes your code look cleaner.

Previous Page Lesson Contents Next Page Start of Tutorial > Start of Trail > Start of Lesson Search
Feedback Form

Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.