Some Java Guy
Some Java Guy

Reputation: 5118

for each loop exception

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

Answers (5)

Balaswamy Vaddeman
Balaswamy Vaddeman

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

Starx
Starx

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

Sunil Kumar B M
Sunil Kumar B M

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

Boosty
Boosty

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

Chandra Sekhar
Chandra Sekhar

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

Related Questions