为什么我不能推到堆栈上?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实例可能为空