Java中这个ArrayIndexOutOfBoundsException的原因是什么?

时间:2017-03-13 15:39:04

标签: java arrays

运行此函数时,Java抛出ArrayIndexOutOfBoundsException错误:

public int[] copySecondSlice(int[] array) {
    int[] newArray = new int[array.length/2];
    for (int i = array.length/2; i < array.length; i++) {
        assert i == 1;
        newArray[i] = array[i];
    }
    return newArray;
}

我尝试了多个资产来检查我是否优于0并且低于我阵列的长度,但没有任何诀窍。有人可以帮我理解我的错误吗?

1 个答案:

答案 0 :(得分:0)

只是因为您正试图访问超出数组新数组的索引。

int[] newArray = new int[array.length/2];

在此声明 newArray的长度是 array.length / 2

并且

for (int i = array.length/2; **i < array.length**; i++) {
 newArray[**i**] = array[i];

你的条件允许迭代到array.length-1所以newArray应该填充到该索引,即array.length-1。但是我们的newArray长度仅为array.length/2,所以它超出了界限。

因为@RP说你可以纠正它。

newArray索引应该从0而不是i开始。像

这样的东西
  for (int j=0, i = array.lenght/2; i < array.length; i++, j++) { 
       ...
       newArray[j] = array[i];