для каждого исключения цикла - PullRequest
1 голос
/ 02 апреля 2012

Я получил исключение во второй строке печати. ​​

int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num){
System.out.print("  " + num[d]);
}

Вывод на консоль

Given number : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 50

Почему не берут все элементы массива, а только 50?

Ответы [ 5 ]

6 голосов
/ 02 апреля 2012

В цикле for(int d:num) каждый элемент представлен d, а не num[d]

Итак, вот как это должно быть сделано.

for(int d:num){
    System.out.print("  " + d);
}

Простой пробный прогон покажет вам, где вы ошиблись.

Для первого цикла ваше утверждение снизится до num[50], который нигде недоступен, поэтому вы получите исключение.


Однако, если ваша попытка была использовать индексирование, то простой трюк ниже поможет вам

int index = 0;
for(int d:num){
    System.out.print("  " + num[index++]);
}

Но я искренне верю, это не правильное решение проблемы.

3 голосов
/ 02 апреля 2012

In для каждого цикла num [любой индекс] не требуется. Он просто извлекает из первого индекса в последний индекс и присваивает каждому из них переменную d. Так что вам просто нужно вывести значение d.

for(int d:num){
System.out.print("  " + d);
}
1 голос
/ 02 апреля 2012

Используя расширенный цикл for, вы можете напрямую использовать переменную "d" в вашем примере:

System.out.print(d);

Причина, по которой вы получаете ArrayIndexOutOfBound, заключается в том, что num[d] пытается получить 50-е место в массивена первой итерации.(Который вне границ).

0 голосов
/ 02 апреля 2012

Вы можете захотеть кодировать, как показано ниже.

for(int d:num){
System.out.print("  " + d);
}

Как работает Java для каждого цикла?

0 голосов
/ 02 апреля 2012

Вы не должны использовать индекс массива при использовании для каждого цикла.

В вашем коде

int num[] = {50,20,45,82,25,63};
System.out.print("Given number : ");
for(int d:num)
{
    System.out.print("  " + num[d]);
}

в первой итерации приведет к d = 50, что является вашимжелаемый результат.Если вы используете num[d], это приведет к num[50], что является неправильным индексом.

Вместо этого используйте следующий код

for(int d:num)
{
    System.out.print("  " + d);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...