1

我有这个代码来交换数组元素对:

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)

为什么我会收到此异常?我该如何解决?

4

4 回答 4

4

让我们画一个表格:

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

请注意,数组在 Java 中是从零开始的,这意味着,如果您有一个大小为N4 的数组(在您的情况下为 4),那么索引是 from 0to N - 1(在您的情况下为0to 3)。

因此,当您尝试访问a[a.length - 1 + 1]a[i+1]在最后一次迭代中)时,您会得到ArrayIndexOutOfBoundsException

于 2013-07-28T07:21:47.847 回答
1

该错误是由于您正在访问a.length不可用的元素,所以代码抛出ArrayIndexOutOfBoundsException,所以请a.length - 1在for循环中使用。你的问题是最后一次迭代。您试图使用 a[4],但数组 a[] 中的元素从 a[0] 开始并以 a[3] 结束。

于 2013-07-28T07:19:14.760 回答
0

你要去a.length - 1

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

并且您正在尝试访问a.length超出范围的元素

于 2013-07-28T07:14:34.693 回答
0

你从i=0. 所以应该是a.length-1

于 2013-07-28T07:14:49.287 回答