递归方法的NullPointerExceprion

时间:2012-03-28 10:18:44

标签: java recursion nullpointerexception

我有这种递归方法:

 public Hund getMor(int id) {
    Hund barn = getHund(id);
    int idMor = barn.getId_mor();
    Hund mor = getHund(idMor);

    return mor;
}

public String getMorTre(int id) {
    if (id == 0) {
        return null;
    }
    if (!existHund(id)) {
        return "Hunden du søkte etter finnes ikke";
    } else {
        if (id == 0) {
            return null;
        } else {
            Hund mor = getMor(id);
            MinRamme.jta.append(mor.toString() + "\n");
            int morId = mor.getId();
            return getMorTre(morId);
        }

    }
}

如果id为0,我试图通过返回null来删除nullpointer,但这不起作用。有没有人有解决方案?

NPE:

Exception in thread "AWT-EventQueue -0" java.lang.nullpointerexception
at Arkiv.getMorTre(Arkiv.java:209)
at Arkiv.getMorTre(Arkiv.java:211)
at Arkiv.getMorTre(Arkiv.java:211)
at MinRamme$4.actionPerformed(MinRamme.java:89) <37 internal calls>

4 个答案:

答案 0 :(得分:3)

NullPointerException发生在哪里?那会有所帮助......那就是说:

在你的else子句中,你的

if (id==0) {

没用,因为你在开始时测试它并且id没有改变。

我认为您需要检查是否

getMother(id) 

返回null,这可能是你获得NullPointer的地方......但你现在可以确认,不是吗?

答案 1 :(得分:2)

很可能(但很难确认,直到你告诉我们什么线投掷NPE)生成NPE的线是

MyFrame.jta.append(mother.toString() + "\n");

因为母亲是空的。您可以将代码更改为:

Dog mother = getMother(id);
if (mother == null) {
    //do something
}

答案 2 :(得分:1)

这里确实没有足够的信息。你得到空指针的是哪一行?

如果我怀疑它在这里:

MyFrame.jta.append(mother.toString() + "\n");

然后你需要通过调试确定它肯定是是空的。如果你已经这样做了,那么你可以绝对肯定你的getMother(id);对于要传入的id,返回null。

如果我是你,我会为getMother(id)方法创建一个单元测试,并传入导致失败的id。

如果你不知道导致问题的id值是什么,那么至少要坚持一些System.out.print()语句来找出发生了什么。虽然,您最好使用一些日志框架,例如log4j。

希望这有帮助。

答案 3 :(得分:-1)

因为您的例外是mother.toString()方法..

试试这个

try
{
 MyFrame.jta.append(mother.toString() + "\n");
}catch(NullPointerException ignore){}