我的塔程序中输出错误或空指针异常

时间:2012-10-30 18:41:13

标签: java exception recursion towers-of-hanoi

我正在通过使用堆栈和链接列表以及使用递归将块从塔移动到塔来解决塔游戏。

我在我的问题中遇到了导致java.lang.NullPointerException的问题。我猜这种情况发生的原因是我尝试从堆栈中弹出值,即使没有条目也是如此。在我进行绑定控制后,我仍然收到该错误。

错误指向使用deleteFirst()方法的行但我不明白为什么即使在我检查列表是否为空之后会发生这种情况。

我的任务只是传递塔或LinkedStack对象,然后以塔式游戏方式移动他们的内容。

错误:

Exception in thread "main" java.lang.NullPointerException
    at LinkList.deleteFirst(towers.java:47) // code with: **first = first.next;**
    at LinkedStack.pop(towers.java:82) // code with: return theList.deleteFirst();
    at LinkListApp.doTowers(towers.java:146) // code with: A.pop();
    at LinkListApp.doTowers(towers.java:140) // doTowers(a-1, A, C, B);
    at LinkListApp.main(towers.java:121) // doTowers(nDisks, linkA, linkB, linkC);

我在这里做错了什么?我无法做到这一点。应该如此。

1 个答案:

答案 0 :(得分:2)

你的doTowers调用会调用A.pop()和C.pop(),这两个都不受保护。您的LinkedStack直接调用List.deleteFirst()而没有空检查,并且您的deleteFirst方法调用first = first.next而不检查first是否为null。最好使LinkedList足够智能,以便在这种情况下deleteFirst不会抛出NPE,那么您不需要在上层的所有位置进行特殊检查。为此,请将deleteFirst更改为

public long deleteFirst()
{
    if ( first != null ) {
        Link temp = first;
        first = first.next;
        return temp.dData;
    }
    else {
        return whateverIndicatesTheListIsAlreadyEmptyWhichMayBeHardWithReturnTypelong;
    }
}