我正在尝试添加通过方法调用从数组中删除项目的功能,但遇到了标题中发布的问题。
说明如下:
为 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
答案 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;