Java for Loops
Jakob Jenkov |
The Java for
loop repeats a set of Java operations.
A for
loop repeats a block of code as long as some condition is true. Here is a simple
Java for
loop example:
for(int i=0; i < 10; i++) { System.out.println("i is: " + i); }
This example is a standard Java for
loop. Inside the parentheses () after the for
keyword,
are three statements separated by semicolon (;).
The first statement declares an int
variable named i
and assigns it the value 0
.
This statement is only executed once, when the for
loop starts.
The second statement compares the value of the i
variable to the value 10
. If the
value of i
is less than 10
, then the for
loop is executed one more time.
This statement is executed before each repetition of the for
loop.
The third statement increments the value of i
. This statement is also executed once per iteration
of the for
loop, after the body of the for
loop is executed.
The result of the for
loop shown above is that the body of the loop is executed 10 times. Once for each
of the values of i
that are less than 10 (0 to 9).
You don't actually need the curly braces around the for
loop body. If you omit the curly braces,
then only the first Java statement after the for
loop statement is executed. Here is an example:
for(int i = 0; i < 10; i++) System.out.println("i is 1: " + i); // executed inside loop. System.out.println("second line"); // executed after loop.
In this example, only the first System.out.println()
statement is executed inside the for
loop. The second System.out.println()
statement is not executed until after the for
loop is finished.
Forgetting the curly braces around the for
loop body is a common mistake. Therefore it can be a
good habit to just always put them around the for
loop body.
Loop Initializer, Condition and Post Iteration Operation
As mentioned earlier, the for
loop contains three statements, separated by semicolons.
Here is the example from above, showing the three statements:
for(int i=0; i < 10; i++) { System.out.println("I is: " + i); }
These statements each have a different role in the execution of the for
loop. These
roles are:
- Loop initializer
- Loop condition
- Post iteration operation
I'll explain the roles in a bit more detail below.
Loop Initializer
The loop initializer statement is only executed once, before the for
loop begins. The loop initializer
statement is typically used to initialize variables or objects that are used by the loop condition statement.
In the example above (repeated below) the loop initializer statement (marked in bold) declares an int
variable and assigns it the value 0.
for(int i=0; i < 10; i++) { System.out.println("i is: " + i); }
You don't need a loop initializer statement. It is optional. Here is a for
loop without a loop initializer
statement:
MyLoop loop = new MyLoop(10); for( ; loop.loopAgain() ; loop.iterationDone()) { }
Notice how an object is used to keep the state which controls the loop. Of course this object could
have been declared inside the loop initializer statement. I just moved it outside the for
loop to show that it is possible.
You can also initialize multiple variables inside the loop initializer statement. Here is an example of that:
for(int i=0, n=10; i < n; i++) { }
Notice how two variables are declared. The i
variable used as iteration counter, and the n
variable which is used as an iteration boundary. Notice also, how the loop condition now compares the i
variable to the n
variable, instead of to a constant value.
Condition
The condition statement is the second statement inside the for
loop parentheses. This statement is an expression
that should evaluate to either true
or false
. If the statement evaluates to true
, the for
loop is
evaluated one more time. If the statement evaluates to false
, the for
loop is not executed anymore,
and execution jumps to the first statement after the body of the for
loop.
Here is an example for
loop with the condition statement marked in bold:
for(int i=0; i < 10; i++) { }
Post Iteration Operation
The third statement in the for
loop is the post iteration statement. This statement is executed
after each iteration of the for
loop. This statement is typically used to update the variables
that control the condition statement. For instance, increment a counter variable.
Here is an example for
loop with the post iteration statement marked in bold:
for(int i=0; i < 10; i++) { }
The post iteration statement increments the variable i
. In the condition statement the variable i
is compared to the value 10
. If i
is less than 10
, the for
loop
is executed one more time.
The post iteration statement is optional, like the loop initializer statement. Here is an example without post iteration statement:
MyLoop loop = new MyLoop(10); for( ; loop.loopAgain() ; )) { }
The Java for each Loop
In Java 5 a variation of the for
loop was added. This variation is called the for each
loop. Here is a Java for each
loop example:
String[] strings = {"one", "two", "three" }; for(String aString : strings) { System.out.println(aString); }
Notice the String
array. This array is used inside the for each
loop. Notice how a
String aString
variable is declared inside the parentheses of the for
loop. For each
iteration of the for each
loop this variable will be bound to one of the String
objects
from the strings
array. The for each
loop will repeat once for each element in the
strings
array.
The Java for each
loop can also be used with generic collections. I have explained that in more detail
in my Java Iterable tutorial, which is part of my Java Collections tutorial.
The continue Command
Java contains a continue
command which can be used inside Java for
(and while
)
loops. The continue
command is placed inside the body of the for
loop. When the continue
command is met, the Java Virtual Machine jumps to the next iteration of the loop without executing more of the
for
loop body. The next iteration of the for
loop body will proceed as any other. If that
iteration also meets the continue
command, that iteration too will skip to the next iteration, and so forth.
Note: When the continue
command skips to the next iteration of the loop, the post-iteration action
is still executed for that iteration.
Here is a simple continue
example inside a for
loop:
String[] strings = { "John", "Jack", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; for(int i=0; i < strings.length; i++) { if(! strings[i].toLowerCase().startsWith("j")) { continue; } wordsStartingWithJ++; }
Notice the if
statement inside the for
loop. This if
statement checks
if each String
in the strings
array does not start with with the letter j
.
If not, then the continue
command is executed, and the for
loop continues to the next
iteration.
If the current String
in the strings
array does start with the letter j
,
then the next Java statement after the if
statement is executed, and the variable wordsStartingWithJ
is incremented by 1.
The continue
command also works inside for each
loops. Here is a for each
version of the previous example:
String[] strings = { "John", "Jack", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; for(String aString : strings) { if(! aString.toLowerCase().startsWith("j")) { continue; } wordsStartingWithJ++; }
The for
loop looks a bit different, but the logic and functionality remains the same.
The break Command
The break
command is a command that works inside Java for
(and while
) loops.
When the break
command is met, the Java Virtual Machine breaks out of the for
loop,
even if the loop condition is still true. No more iterations of the for
loop are executed once
a break
command is met. Here is a break
command example inside a for
loop:
String[] strings = { "John", "Jack", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; for(int i=0; i < strings.length; i++) { if(strings[i].toLowerCase().startsWith("j")) { wordsStartingWithJ++; } if(wordsStartingWithJ >= 3) { break; } }
Notice the second if
statement inside the for
loop. This if
statement checks if 3 words or more have been
found which starts with the letter j
. If yes, the break
command is executed, and the
program breaks out of the for
loop.
Like with the continue
command, the break
command also works inside for each
loops. Here is the example from before, using a for each
loop instead:
String[] strings = { "John", "Jack", "Abraham", "Jennifer", "Ann" }; int wordsStartingWithJ = 0; for(String aString : strings) { if(aString.toLowerCase().startsWith("j")) { wordsStartingWithJ++; } if(wordsStartingWithJ >= 3) { break; } }
Just a little difference in the for
loop, but the overall functionality remains the same.
Variable Visibility in Java for Loops
Variables declared inside the parentheses or the body of a Java for
loop are only visible inside
the for
loop body. This is true for variables of for each
loops too. Look at this
Java for
loop example:
for(int i=0; i<10; i++) { String iAsNo = String.valueOf(i); }
The variables i
and iAsNo
are only visible inside the for
loop body.
They cannot be referenced outside the for
loop body.
The same is true for the aString
variable in this Java for each
loop example:
String strings = {"one", "two", "three" }; for(String aString : strings) { System.out.println(aString); }
Since the aString
variable is declared inside the parentheses of the Java for each
loop,
the variable is only visible inside the for each
loop.
for Loops in Other Languages
For the curious reader, here are links to tutorials about for loop instructions in all the programming languages covered here at Jenkov.com:
Tweet | |
Jakob Jenkov |