aspose file tools*
The moose likes Beginning Java and the fly likes How does enhanced for loop behave? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "How does enhanced for loop behave?" Watch "How does enhanced for loop behave?" New topic
Author

How does enhanced for loop behave?

Mujahid Mehdi
Greenhorn

Joined: Apr 09, 2008
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

Joined: Apr 14, 2004
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.

Think about it:

  • 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 ]

    JavaRanch FAQ HowToAskQuestionsOnJavaRanch
    Balasubramani Dharmalingam
    Ranch Hand

    Joined: Dec 06, 2004
    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}


    Balasubramani SD,<br />SCJP 1.4,SCWCD 1.4,SCJP 5.0<br /><a href="http://sd.balasubramani.googlepages.com" target="_blank" rel="nofollow">www.sd.balasubramani.googlepages.com</a>
    Joanne Neal
    Rancher

    Joined: Aug 05, 2005
    Posts: 3534
        
      15
    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}


    Joanne
    Ernest Friedman-Hill
    author and iconoclast
    Marshal

    Joined: Jul 08, 2003
    Posts: 24184
        
      34

    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!


    [Jess in Action][AskingGoodQuestions]
    Mujahid Mehdi
    Greenhorn

    Joined: Apr 09, 2008
    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.
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: How does enhanced for loop behave?