我使用以下方法从数组中删除元素。该数组包含一组类实例,每个实例都包含一个名称和编号。因此,从数组中删除例如position [3]将删除该位置的名称和数字[3]并随机播放数组中的位置。我能够按预期删除该元素,但当我尝试在位置[3]返回新数字时出现ArrayOutOfBounds错误。 (3只是一个例子)。
第一个if语句是处理arrayoutofbounds,以防元素是最后一个。在这种情况下,即使return语句与给出问题的语句相同,它也能正常工作并返回。请告诉我我做错了什么。谢谢。
public String remove(String name) {
//find() is a helper method that returns an int
if (find(name) == Directory.length-1){
Directory[find(name)] = null;
return Directory[find(name)].getNumber();
}
else if (find(name) >= 0){
//Directory is the array holding the class instances.
for (int i = find(name); i < Directory.length-1; i++){
Directory[i] = Directory[i+1];
}
//this return is causing the error.
return Directory[find(name)].getNumber();
}
return null;
}
如前所述,异常是ArrayOutOfBounds。 例如,数组包含索引0中的[“Alan”“123”]和索引1中的[“Bobby”“456”]。当我删除索引0中的内容时,必须删除[“Alan”“123”]并且[“Bobby”“456”]必须向下移动到那个位置。调用以下return语句时,必须返回数字456。
return theDirectory[find(name)].getNumber();
答案 0 :(得分:0)
问题是你要这样做:
return Directory[find(name)].getNumber();
在您从数组中删除元素后返回索引。因为您已删除了名称,所以find()不再返回相同的索引。
你想要做的是将一个int变量设置为find(name)的结果,然后使用该变量而不是find()方法。
答案 1 :(得分:0)
最好只拨一次find()
。此外,这样您可以保存索引以便以后使用。
public String remove(String name) {
int indx = find(name);
if(indx < 0)
return null;
String num = Directory[indx].getNumber();
if (indx == Directory.length-1){
Directory[indx] = null;
return Directory[indx].getNumber();
}
else{
//Directory is the array holding the class instances.
for (int i = indx; i < Directory.length-1; i++){
Directory[i] = Directory[i+1];
}
//this return is causing the error.
return Directory[indx].getNumber();
}
return null;
}