索引超出范围,正在从am数组中删除项

eit6fx6z  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(399)

我正在尝试添加通过方法调用从数组中删除项的功能,但遇到了标题中发布的问题。
说明如下:
为arrayintlist类编写一个名为remove的新方法,该方法采用整数索引并删除给定索引处的值,然后将后续值向左移动。例如,如果名为list的变量存储以下值:

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

进行此方法调用后:
“列表。删除(1);”将从数组中删除3(不是这不特定于数组的第一个值)
我试图实现这样的目标:

  1. public void remove(int index) {
  2. int target = index;
  3. int[] elementDataCopy = new int[size];
  4. size = elementData.length;
  5. if (index < 0 || index >= size) {
  6. throw new IllegalArgumentException("invalid index");
  7. }
  8. //loop through each value until the index given is == to loop value
  9. //create a copy of elementData where length is one less and value at
  10. //index given is not present
  11. //each time something is removed, the tracked values decrease by one
  12. size--;
  13. for(int i = 0; i < elementData.length + 2; i++){
  14. if (elementData[i] == target){
  15. continue;
  16. }else{
  17. elementDataCopy[i] = elementData[i];
  18. }
  19. }
  20. }
  21. ``
  22. but get this error:

失败:索引12超出长度12的界限

  1. with the numbers differing depending on what input is.
  2. note that elementData is an array of ints and index is an int that is pointing at a point in said array
  3. all help is appreciated, pretty sure this is something basic
xqkwcwgp

xqkwcwgp1#

像这样试试。最大的错误是使用 i 对于源索引和目标索引。用一个单独的( k 这里)目的地。仅在复制时增加目标索引。完成后,将elementdatacopy重新分配给elementdata。

  1. int k = 0;
  2. for(int i = 0; i < elementData.length; i++) {
  3. if (i == index) { // skip the one to "delete"
  4. continue;
  5. }
  6. elementDataCopy[k++] = elementData[i];
  7. }
  8. elementData = elementDataCopy;

相关问题