为什么我不能推到堆栈上?Java6泛型

为什么我不能推到堆栈上?Java6泛型,java,generics,nullpointerexception,stack,Java,Generics,Nullpointerexception,Stack,我不知道为什么我不能做像将泛型对象推到堆栈上这样简单的事情。我决定需要一些人帮我弄清楚这件事。这就是我所拥有的: private void preOrderTrav(BSTnode<K> node) { if(node != null){ myStack.push(node); //Null pointer exception while(!myStack.isEmpty()){

我不知道为什么我不能做像将泛型对象推到堆栈上这样简单的事情。我决定需要一些人帮我弄清楚这件事。这就是我所拥有的:

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)

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

myStack.push(node); 
正如你提到的,有一张支票

if(node != null)
唯一可以为null的是myStack。否则这是不完整的信息

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

这是myStack.pushnode;如果您确定这是获得NullPointerException的地方,则BSTSortedListIterator.java中的第33行

myStack.push(node); 
正如你提到的,有一张支票

if(node != null)
唯一可以为null的是myStack。否则这是不完整的信息

Exception in thread "main" java.lang.NullPointerException
    at BSTSortedListIterator.preOrderTrav(BSTSortedListIterator.java:33)
这是myStack.pushnode;BSTSortedListIterator.java中的第33行在大多数情况下myStack实例为null,因为stack.push即使在插入null元素的情况下也不会抛出错误。Java堆栈类专门使用Vector或array作为底层存储,在添加元素时将元素添加到其数组中:

elementData[elementCount++] = obj;
所以,我在这一行没有看到NPE是due push方法。

在大多数情况下,myStack实例作为stack是null的。即使插入null元素,push也不会抛出错误。Java堆栈类专门使用Vector或array作为底层存储,在添加元素时将元素添加到其数组中:

elementData[elementCount++] = obj;

因此,我看不到这一行的NPE是due push方法。

您需要在main或其他地方初始化myStack对象,但在调用preOrderTravnode之前。如果没有像这样的线路

myStack = new Stack<K>()

很可能您忘记了这一点。

您需要在main或其他位置初始化myStack对象,但在调用preOrderTravnode之前。如果没有像这样的线路

myStack = new Stack<K>()

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

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

开始时,我将变量设置为静态堆栈

然后我得到了空指针

我通过如下设置变量来解决此问题:

static Stack<Node> stack= new Stack<Node>();

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

开始时,我将变量设置为静态堆栈

然后我得到了空指针

我通过如下设置变量来解决此问题:

static Stack<Node> stack= new Stack<Node>();

你初始化myStack了吗?从你发布的代码来看,它不清楚。看起来你的myStack实例可能为空。你初始化了myStack吗?从您发布的代码来看,它不清楚。看起来您的myStack实例可能为空