2012-02-21 6 views
8

Вот мой код:Перебор элементов массива в обратном направлении

int myArray[]={1,2,3,4,5,6,7,8}; 

for(int counter=myArray.length; counter > 0;counter--){ 
    System.out.println(myArray[counter]); 
} 

Я хотел бы, чтобы распечатать массив в порядке убывания, а не в порядке возрастания (от последнего элемента массива к первому), но я просто получил эту ошибку:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 
    at task1.main(task1.java:14) 

Почему это происходит? Я надеялся, что, используя myArray.length для установки счетчика на 8, код просто распечатает 8-й элемент массива, а затем сохранит его до этого.

+0

Я не знаю стиль индексирования массива в Java, но если он такой же, как в C, вы пытаетесь напечатать элемент массива из границ массива в первой итерации. – Mallik

ответ

45

Массивы в Java индексируются 0 к length - 1, не 1 к length, поэтому вы должны быть присвоить переменной соответствующим образом и использовать правильный оператор сравнения.

Ваш цикл должен выглядеть следующим образом:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
+0

Спасибо, много это сработало great – JimmyK

+0

У меня было это, но вместо того, чтобы отбирать у меня счетчик, я просто оставил его как есть. Хорошая работа. – James111

4
  • Первый индекс 0, а последний индекс 7 не 8
  • Размер массива 8
2

Вы «начинаются с неправильного индекса. Делают это так:

for(int counter= myArray.length - 1; counter >= 0;counter--) { 

Последний индекс массива является его длина минус 1.

2

использование myArray.length-1

for(int counter=myArray.length-1; counter >= 0;counter--){ 
       System.out.println(myArray[counter]); 
      } 
3

Проблема здесь этот кусок кода: myArray.length. В Java, как и в большинстве других языков, структуры данных основаны на 0, поэтому последний элемент имеет индекс structure.length - 1 (а первый - 0). Так что в вашем случае, вы должны изменить цикл следующим образом:

for(int counter=myArray.length - 1; counter >= 0;counter--){ 
      System.out.println(myArray[counter]); 
     } 
2

счетчик начиная с индекса myArray.length который фактически отсчитывается от 1 вместо 0 ..

for(int counter=myArray.length - 1; counter > 0; counter--){ 
0

int myArray[]={1,2,3,4,5,6,7,8};

здесь дана длина массива 8, как отсчет начинается с 1, но подходит для индекса myArray[0] = 1; и так далее .... здесь отсчет индекса начинается с 0. так что в вашем фрагменте кода

for(int counter = myArray.length - 1; counter >= 0; counter--) { 

выходит из границы массива, поэтому он показывает вам ArrayIndexOutOfBoundsException.

Смежные вопросы