• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

How does enhanced for loop behave?

 
Greenhorn
Posts: 2
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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?
 
Bartender
Posts: 10336
Hibernate Eclipse IDE Java
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
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 ]
     
    Ranch Hand
    Posts: 116
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    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}
     
    Rancher
    Posts: 3742
    16
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    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}
     
    author and iconoclast
    Posts: 24207
    46
    Mac OS X Eclipse IDE Chrome
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    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
    • Mark post as helpful
    • send pies
      Number of slices to send:
      Optional 'thank-you' note:
    • Quote
    • Report post to moderator
    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.
     
    With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
    reply
      Bookmark Topic Watch Topic
    • New Topic