只有当一个对象确实存在时,我才能引用它



我正在用java中的链表实现一个堆栈。问题是,当下面没有元素时,我会得到一个nullPointerException,例如StackNode.link不存在。因此,如果我尝试分配StackNode.link,我会得到Exception。

使用if语句只在代码存在的情况下运行代码,我只在if语句中得到Exception。我该怎么做?

int pop() {
StackNode temp = top;
// update top
top = belowTop;
belowTop = top.link; // this is where I get the nullPointExcpetion

return temp.data;
}

我希望当top.link不存在(例如为null(时,belowTop将为null。这很好,但正如所描述的,我得到了例外。

编辑:这是我在if语句中尝试的

if (top.link != null) {
belowTop = top.link;
}
else {
belowTop = null;
}

您需要检查变量top是否已初始化:

...
if (top != null) {
belowTop = top.link;
} else {
// Handle the not initialized top variable
}
...

可能一个好的解决方案是,如果belowTop未初始化,则抛出运行时异常,如

...
if (top == null) {
throw new IllegalStateException("Can't pop from an empty stack");
} 
belowTop = top.link;
...

在这种情况下,您还必须准备一个方法,该方法能够检查堆栈是否为空或未初始化。这里有一个完整的建议:

public boolean isEmpty() {
// Your logic here 
}
// Better have a public access because it seems an utility library and 
// it should be accessed from anywhere
public int pop() {
StackNode temp = top;
// update top
top = belowTop;
if (top == null) {
throw new IllegalStateException("Can't pop from an empty stack");
} 
belowTop = top.link; // Now it works
return temp.data;
}

您可以按如下方式使用它:

if (!myStack.isEmpty()) {
int value = myStack.pop();
// Do something
}

试试这个:

if (top.link != null) {
belowTop = top.link;
} else {
//handle the exception
}

上面检查top.link是否为null,这是一个有效的检查,不会导致nullPointerException。

相关内容

  • 没有找到相关文章

最新更新