2013-04-25 66 views
1

我不知道爲什麼我無法做一些簡單的操作,只需將泛型類型的對象推入堆棧即可。我決定我需要一些幫助來解決這個問題。這是我有:爲什麼我不能推入堆棧? Java 6泛型

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

任何人有任何的想法:

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()); 

       } 

      } 
       } 

這正從我的構造函數叫什麼名字?我得到這個錯誤,順便說一句:

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) 
+3

你有沒有初始化myStack:

我通過設置像變量解決這個問題?從你發佈的代碼不清楚。 – 2013-04-25 08:21:51

+0

看起來像你'myStack'實例可能爲空 – harsh 2013-04-25 08:22:43

回答

2

如果您確定這就是你所得到的NullPointerException

myStack.push(node); 

,正如你剛纔所說,有一個檢查

if(node != null) 

唯一可以爲空的東西是myStack。否則這是不完整的信息。

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

這是myStack.push(node);行數33 BSTSortedListIterator.java

1

在大多數概率myStack實例爲null,爲stack.push甚至不會在被插入null元素的情況下拋出錯誤。 JavaStack類使用Vector(或陣列具體),其添加元素添加元素進入其陣列底層存儲:

elementData[elementCount++] = obj; 

所以,我並不在該行NPE是由於推法看到。

1

您需要在主或其他地方初始化myStack對象,但在任何調用preOrderTrav(節點)之前。如果沒有任何線如

myStack = new Stack<K>() 

那麼機會是,你忘了這一點。

0

我得到了同樣的問題,我用JAVA 8

在開始的時候,我在我的變量設置爲static Stack<Node> stack;

然後我null pointer

static Stack<Node> stack= new Stack<Node>(); 
相關問題