在数组中的特定索引处插入项 - IndexOutOfBounds异常

时间:2013-11-13 14:56:41

标签: java arrays oop indexoutofboundsexception

此功能应该在所选索引处添加一个元素,并将数组元素中的所有其他元素向下推。所以,例如,假设我有以下数组:

[0] = zero
[1] = one
[2] = two

如果我在索引0处添加另一个名为NEWZERO的元素,则数组必须如下所示:

[0] = NEWZERO
[1] = zero 
[2] = one 
[3] = two

但是目前我得到了IndexOutOfBounds异常并且它不起作用,尽管我的数组比3个元素大得多。

P.S。我不想使用内置的ArrayList库,它会自动为你做这件事。

public void insert(int i, String s) {

if (array[i] == null) {
    array[i] = s; //Need to add feature that instantly puts the element at the first available spot on the list.
} else { 
    for (int j = i; j < array.length; j++) { //Can't use >= i
        array[j + 1] = array[j]; //THIS IS WHERE I GET THE ERROR.

        if (j == array.length - 1) { 
            break;
        } 
    }
    array[i] = s;
    extendArray(); //If an element is inserted properly, the array becomes array.length + 1

我没有收到错误,因为我的数组中没有空格。即使我有一个包含20个元素的数组,并且我只使用了3个,我仍然会收到OutOfBounds错误。这是我的扩展数组方法,用于当用户用完数组空间时。

public void extendArray() {
    String[] items2 = new String[items.length + 1];
    for (int j = 0; j < items.length; j++) {
        items2[j] = items[j];
    }
    items = items2;
}

5 个答案:

答案 0 :(得分:3)

初始化数组时,它的存在范围为0到length-1。

代码

for (int j = i; j < array.length; j++) { //Can't use >= i
    array[j + 1] = array[j]; //THIS IS WHERE I GET THE ERROR.

您正在尝试将值存储到超出数组范围的数组[length]。

所以将for更改为

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 

答案 1 :(得分:1)

j在循环中到达array.length-1时,array[j + 1]超出范围。

要解决此问题,请更改停止条件(并删除break,因为它完全没必要):

for (int j = i; j < array.length - 1; j++) {
    array[j + 1] = array[j];
}

最后,您可能希望通过一次调用System.arraycopy()来替换整个循环。

答案 2 :(得分:1)

当j到达最后时,j + 1将超出约束并导致arrayIndexoutOfBoundException

解决方案:

更改for循环,如下所示

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
array[j + 1] = array[j]; 
}

答案 3 :(得分:1)

你已经在循环中有j的条件,那你为什么需要第二个呢?只需使用

for (int j = i; j < array.length - 1; j++) { //Can't use >= i
    array[j + 1] = array[j]; 
}

答案 4 :(得分:1)

尝试此修复

    for (int j = i; j < array.length - 1; j++) { //Can't use >= i
        array[j + 1] = array[j]; 
    }

此外,在插入新元素之前扩展数组的大小是有意义的