在我的towers程序中,我一直得到错误的输出或空指针异常



我正在通过使用堆栈和链表来解决塔楼游戏,并通过递归将块从一个塔楼移动到另一个塔楼。

我在问题中遇到了一个问题,导致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);

我在这里做错了什么?我做不到。正如它应该做的那样。

您的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;
}
}

最新更新