删除旧号码后无法返回新号码

时间:2014-03-16 00:59:03

标签: java arrays

我使用以下方法从数组中删除元素。该数组包含一组类实例,每个实例都包含一个名称和编号。因此,从数组中删除例如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();

2 个答案:

答案 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;
}