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

Java 删除旧号码后无法返回新号码,java,arrays,Java,Arrays,我使用以下方法从数组中删除元素。数组包含一组类实例,每个实例包含一个名称和编号。因此,从数组中删除例如位置[3]将删除该位置[3]处的名称和编号,并洗牌数组中的位置。我可以按预期删除元素,但在尝试返回位置[3]处的新编号时,ArrayOutOfBounds出现错误。(3只是一个例子) 如果元素是最后一个,则第一个if语句将处理边界的arrayoutofbounds。在这种情况下,即使return语句与给出问题的语句相同,它仍然可以正常工作并返回。请告诉我我做错了什么。谢谢 public Stri

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

问题是您正在这样做:

return Directory[find(name)].getNumber();
从数组中删除元素后返回索引。由于已删除该名称,因此find()不再返回相同的索引


您要做的是将一个int变量设置为find(name)的结果,并从那时起使用该变量而不是find()方法。

最好只调用一次
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;
}
删除公共字符串(字符串名称){
int indx=查找(名称);
if(indx<0)
返回null;
String num=目录[indx].getNumber();
if(indx==Directory.length-1){
目录[indx]=null;
返回目录[indx].getNumber();
}
否则{
//目录是包含类实例的数组。
for(int i=indx;i
请展开示例。发布声明、预期结果、实际结果。包括find和exception的定义。
10>=0
始终保证为真。我相信你的意思与imtheman的代码相同。它不起作用。相同的边界排列错误。@keshk抱歉,我解决了问题。谢谢。如果indx小于0,它可以正常工作,但返回的边界数组很奇怪。当我删除最后一个元素或中间元素时,只要数字是正数,其余的都可以正常工作。嗯,不应该是这样。如果
indx
低于0,则应返回
null
;更正了。是我的错。我编辑并放置了字符串num=Directory[indx].getNumber();在if语句的顶部检查-ve值。
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;
}