索引超出范围,从数组中删除项目

时间:2021-01-06 00:11:09

标签: java

我正在尝试添加通过方法调用从数组中删除项目的功能,但遇到了标题中发布的问题。

说明如下:

为 ArrayIntList 类编写一个名为 remove 的新方法,该方法采用整数索引并删除给定索引处的值,将后续值向左移动。例如,如果名为 list 的变量存储以下值:

[3, 19, 42, 7, -3, 4]

调用此方法后:

"list.remove(1);" 将从数组中删除 3 (这不是特定于数组的第一个值

我尝试这样做:

    public void remove(int index) {
        int target = index;
        int[] elementDataCopy = new int[size];
        size = elementData.length;
        
        if (index < 0 || index >= size) {
            throw new IllegalArgumentException("invalid index");
        }
        
        //loop through each value until the index given is == to loop value
        //create a copy of elementData where length is one less and value at 
        //index given is not present
        //each time something is removed, the tracked values decrease by one
        size--;
    
        for(int i = 0; i < elementData.length + 2; i++){
            if (elementData[i] == target){
                continue;
            }else{
                elementDataCopy[i] = elementData[i];
            }
        }
       
    }
``
but get this error:

失败:索引 12 超出长度 12 的范围

with the numbers differing depending on what input is.

note that elementData is an array of ints and index is an int that is pointing at a point in said array

all help is appreciated, pretty sure this is something basic

1 个答案:

答案 0 :(得分:0)

试试这个。最大的错误是将 i 用于源索引和目标索引。使用单独的一个(此处为 k)作为目的地。仅在复制时增加目标索引。一旦完成, 将 elementDataCopy 重新分配给 elementData。

int k = 0;
for(int i = 0; i < elementData.length; i++) {
    if (i == index) { // skip the one to "delete"
        continue;
    }
    elementDataCopy[k++] = elementData[i];
}
elementData = elementDataCopy;