Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!

# How does enhanced for loop behave?

Mujahid Mehdi
Greenhorn
Posts: 2
I am getting the output as 0 0 3 0 5 0 7 0 for the following program:-

class VarArgs{

public static void main(String... args){

int[] arr = {1,2,3,4,5,6,7,8};

for (int i : arr){

arr[i] = 0;

}

for(int i: arr){

System.out.println(i);

}

}

}
Could any one explain how enhanced for loop behaves?

Paul Sturrock
Bartender
Posts: 10336
Enhanced for loops work pretty much as you would expect, following the logic "for each whatever in a list of whatevers do something".

However, this:

is changing your list of "whatevers" while you iterate through it, so that will muddy the waters a bit.

• The first iteration, i == 1, so you change the second element in your arr to be 0.
• The second iteration, i == 0 (because you changed this value in the first iteration) so you change the first element of arr to be 0.
• The third iteration, i == 3, so you change the forth element in arr to be 0.
• The forth iteration, i == 0 (because you changed this value in the third iteration) so you change the first element of arr to be 0.

• And so on. Stick in some debug lines to watch what the values are doing if you don't quite follow the above.
[ April 09, 2008: Message edited by: Paul Sturrock ]

Balasubramani Dharmalingam
Ranch Hand
Posts: 116
What is the output that you are expecting from the above code ?

It is working fine.

So for

First Iteration

i = 1

a[1] = 0

array = {1,0,3,4,5,6,7,8}

Second Iteration

i=0

a[0] = 0

array = {0,0,3,4,5,6,7,8}

Third Iteration

i=3

a[3]=0

array = {0,0,3,0,5,6,7,8}

...
..
...

After completing the eight iteration value in the array will be
{0,0,3,0,5,0,7,0}

Joanne Neal
Rancher
Posts: 3742
16
At start your array contains {1,2,3,4,5,6,7,8};

First time thru the first loop i will be 1, so it sets the second element of your array (arrays are zero based) to 0, so your array contains {1,0,3,4,5,6,7,8}

Second time thru the first loop i will be 0, so it sets the first element of your array to 0, so your array contains {0,0,3,4,5,6,7,8}

Third time thru the first loop i will be 3, so it sets the fourth element of your array to 0, so your array contains {0,0,3,0,5,6,7,8}

Fourth time thru the first loop i will be 0, so it sets the first element of your array to 0, so your array contains {0,0,3,0,5,6,7,8}

Fifth time thru the first loop i will be 5, so it sets the sixth element of your array to 0, so your array contains {0,0,3,0,5,0,7,8}

Sixth time thru the first loop i will be 0, so it sets the first element of your array to 0, so your array contains {0,0,3,0,5,0,7,8}

Seventh time thru the first loop i will be 7, so it sets the eighth element of your array to 0, so your array contains {0,0,3,0,5,0,7,0}

Eigth time thru the first loop i will be 0, so it sets the first element of your array to 0, so your array contains {0,0,3,0,5,0,7,0}

Ernest Friedman-Hill
author and iconoclast
Marshal
Posts: 24211
35
Hi,

Welcome to JavaRanch!

Everything Paul says is precisely correct, but he may have left out an explicit statement of the misunderstanding: the variable "i" takes the values in the array, one at a time, not an array index!

Mujahid Mehdi
Greenhorn
Posts: 2
I appriciate JavaRanch for its wonderful services and I thank Paul Sturrock,
Balasubramani Dharmalingam , Joanne Neal and Ernest Friedman-Hill
for explaining the "for each" behavior. I have understood the concepts.