1

我不知道为什么我不能做一些简单的事情,比如将通用类型的对象推送到堆栈上。我决定我需要一些帮助来解决这个问题。这就是我所拥有的:

private void preOrderTrav(BSTnode<K> node) {
            if(node != null){
            myStack.push(node); //Null pointer exception

            while(!myStack.isEmpty()){
                myStack.pop();
                node = node.getLeft();
                myStack.push(node.getRight());
                myStack.push(node.getLeft());

                }

            }
               }

这是从我的构造函数中调用的:

public BSTSortedListIterator(BSTnode<K> root) {
    preOrderTrav(root);
}

有人有想法么?顺便说一句,我收到此错误:

Exception in thread "main" java.lang.NullPointerException
    at BSTSortedListIterator.preOrderTrav(BSTSortedListIterator.java:33)
    at BSTSortedListIterator.preOrderTrav(BSTSortedListIterator.java:31)
    at BSTSortedListIterator.<init>(BSTSortedListIterator.java:43)
    at BSTSortedList.iterator(BSTSortedList.java:130)
    at WebDictionary.main(WebDictionary.java:135)
4

4 回答 4

2

如果你确定这是你得到 NullPointerException 的地方

myStack.push(node); 

正如你所提到的,有一张支票

if(node != null)

唯一可以为 null 的是myStack。否则这是不完整的信息。

Exception in thread "main" java.lang.NullPointerException
    at BSTSortedListIterator.preOrderTrav(BSTSortedListIterator.java:33)

这是 myStack.push(node);BSTSortedListIterator.java 中的第 33 行吗

于 2013-04-25T08:24:50.503 回答
1

在大多数myStack情况下,实例为 null,因为stack.push即使在插入 null 元素的情况下也不会引发错误。Java Stack类使用Vector(或特别是数组)作为底层存储,在添加元素时将元素添加到其数组中:

elementData[elementCount++] = obj;

所以,我没有看到 NPE 是由于推送方法。

于 2013-04-25T08:25:48.940 回答
1

您需要在 main 或其他地方初始化 myStack 对象,但在调用 preOrderTrav(node) 之前。如果没有任何地方像

myStack = new Stack<K>()

那么很可能,您忘记了这一点。

于 2013-04-25T08:26:24.283 回答
1

我遇到了同样的问题,我用JAVA 8.

一开始,我将变量设置为static Stack<Node> stack;

然后我得到了null pointer

我通过设置变量来解决这个问题:

static Stack<Node> stack= new Stack<Node>();
于 2017-09-10T09:51:04.010 回答