Reputation: 5118
I get an exception in my second print line.
int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num){
System.out.print(" " + num[d]);
}
The console output is
Given number : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50
Why doesn't d take all the array elements but only 50?
Upvotes: 1
Views: 668
Reputation: 8530
you might want to code like below.
for(int d:num){
System.out.print(" " + d);
}
How does the Java 'for each' loop work?
Upvotes: 0
Reputation: 78981
In the for(int d:num)
loop every item is represented by d
not num[d]
So, here is how it should be done.
for(int d:num){
System.out.print(" " + d);
}
A simple dry run will show you where you went wrong.
For the first loop your statement will come down to
num[50]
which is not available anywhere, so you get the exception.
However, if your attempt was to use indexing, then a simple trick below will do the trick
int index = 0;
for(int d:num){
System.out.print(" " + num[index++]);
}
But I honestly believe, this is not the correct solution to the problem.
Upvotes: 6
Reputation: 2795
You are not suppose to use array index while using for each loop.
In your code,
int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num)
{
System.out.print(" " + num[d]);
}
in the first iteration will result in d = 50
, which is your desired result. If you use num[d]
, it will result in num[50]
, which is the wrong index.
Instead, use the below code
for(int d:num)
{
System.out.print(" " + d);
}
Upvotes: 0
Reputation: 701
Using the enhanced for loop you can use the varable "d" in your example directly:
System.out.print(d);
The reason you get an ArrayIndexOutOfBound is that num[d]
tries to acces the 50th place in the array on first iteration. (Which is out of bound).
Upvotes: 1
Reputation: 19502
In for each loop num[any index] is not required. It just retrieves from first index to last index and assign each of them to he variable d. So you just need to print the value d.
for(int d:num){
System.out.print(" " + d);
}
Upvotes: 3