我在使用此方法时遇到问题。该方法位于一个名为vectorOfDogs的文件中,它说的是,假设通过传递给它的标签号删除特定的狗,然后将所有内容向上推。推后,应该减小尺寸。这种方法在下面的注释行上给了我arrayIndexOutOfBoundsException。任何帮助将不胜感激。

Dog[] theDogs = new theDogs[capacity]




public void deleteDog(int tgNm) {
    for (int i=0; i<size; i++) {
        if (theDogs[i].getTagNumber() == tgNm) {
            for (int j=i; j<size; j++) {
                theDogs[j] = theDogs[i+1]; //this line gives an exception
                i--;
            }
        }
    }
    System.out.println("the dog has been deleted");
}

最佳答案

您的代码中存在三个问题:


您不应该在嵌套循环内修改i
到达size-1后,您应该停下来,因为您将元素放在index+1
您应将最后一项设置为null


解决方法如下:

if (theDogs[i].getTagNumber() == tgNm) {
    for (int j=i; j<size-1; j++) {
        theDogs[j] = theDogs[j+1];
    }
    theDogs[--size] = null;
    i--;
}


将最后一项设置为null可以防止无限循环,以防您删除最后一条狗。

07-24 09:29