2013-07-28 4 views
0

У меня есть этот код, чтобы поменять пары элементов массива:Исключение в элементе массива подкачка

int[] a= new int[]{1,2,3,4}; 
for(int i=0; i<a.length ;i++) 
{ 
    int temp= a[i]; 
    a[i] = a[i+1]; 
    a[i+1] = temp; 
} 

Однако, я получаю следующее исключение:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7 
    at com.B.main(B.java:14) 

Почему я получаю это исключение? Как я могу это исправить?

+0

for (int i = 0; i

+0

этот код может вызывать два 'ArrayIndexOutOfBoundsException' 1) From для условия цикла' i swapy

ответ

0

Вы собираетесь ДО a.length - 1

for(int i=0; i<a.length ;i++) 

и вы пытаетесь получить доступ к элементу в a.length который из связанного

0

Вы, начиная с i=0. Так оно и должно быть a.length-1

1

ошибки является по той причине, что вы обращаетесь элементом в a.length, который не доступен, поэтому код кидает ArrayIndexOutOfBoundsException поэтому используйте a.length - 1 в течение цикла. Проблема в вашем случае была, наконец, итерацией. Вы пытались использовать [4], но элементы в массиве a [] начинались с [0] и заканчивались на [3].

4

Позволяет нарисовать таблицу:

i | a[i] 
---+------ 
0 | 1 :) 
1 | 2 :) 
2 | 3 :) 
3 | 4 :) 
4 | ? :_(

Обратите внимание, что массивы с нулем в Java, это означает, что, если у вас есть массив размера N (4 в вашем случае), то индексы от 0 до N - 1 (0 до 3 в вашем случае).

Итак, когда вы пытаетесь получить доступ к a[a.length - 1 + 1] (a[i+1] на последней итерации), вы получаете ArrayIndexOutOfBoundsException.

+1

+ для очень хорошего визуального объяснения. –

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