为什么我不能进入堆叠? Java 6泛型

时间:2013-04-25 08:19:46

标签: java generics nullpointerexception stack

我不知道为什么我无法做一些简单的事情,如将一般类型的对象推入堆栈。我已经决定需要一些帮助来解决这个问题。这就是我所拥有的:

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 个答案:

答案 0 :(得分:2)

如果您确定这是您获得NullPointerException

的地方
myStack.push(node); 

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

if(node != null)

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

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

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

答案 1 :(得分:1)

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

elementData[elementCount++] = obj;

所以,我没有在那条线上看到NPE是应有的推动方法。

答案 2 :(得分:1)

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

那样的行
myStack = new Stack<K>()

然后很有可能,你忘记了这一点。

答案 3 :(得分:0)

我遇到了同样的问题,我使用了vkFlushMappedMemoryRanges

一开始,我将变量设置为TRANSFER WORK that do not use the value transferred BARRIER USE DATAS

然后我得到JAVA 8

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

static Stack<Node> stack;