2012-09-26 31 views
1

我得到一個空指針異常,然後我甚至可以得到我的代碼。我不知道它是否會正常工作,因爲我無法通過這一點。Bubble排序Java中的空Ptr異常

錯誤被拋出這一行:

if(currentNode.getData() > currentNode.getNext().getData()) 

這裏是我的冒泡排序:

public static void bubbleSort(DoubleLinkedList list) //static method used to sort the linked list using bubble sort 
     { 
      int i = 0; 
      int j = 0; 
      Node currentNode = list.head; 
      Node previousNode = currentNode; 
      Node tempNext = currentNode; 
      Node tempPrevious = currentNode; 


      for(i=1; i<list.getSize(); i++) 
      { 
       for(j=0; j<list.getSize()-1; j++) 
       { 
        if(currentNode.getData() > currentNode.getNext().getData()) 
        { 
         if(currentNode == list.head) 
         { 
          Node tempNode = currentNode.getNext(); 

          list.head = tempNode; 
          tempNext = tempNode.getNext(); 

          tempNode.setNext(currentNode); 
          currentNode.setNext(tempNext); 
          currentNode.setPrevious(tempNode); 

          tempNext.setPrevious(currentNode); 
         } 
         else if(currentNode.getNext() == list.last) 
         { 
          Node tempNode = currentNode.getNext(); 
          list.last = currentNode; 
          tempPrevious = currentNode.getPrevious(); 

          tempNode.setNext(currentNode); 
          tempNode.setPrevious(tempPrevious); 

          currentNode.setPrevious(tempNode); 
         } 
         else 
         { 
          Node tempNode = currentNode.getNext(); 
          tempPrevious = currentNode.getPrevious(); 
          tempNext = currentNode.getNext(); 

          tempPrevious.setNext(tempNode); 
          tempNext.setPrevious(currentNode); 

          currentNode.setNext(tempNext); 
          tempNode.setPrevious(tempPrevious); 
         } 

        } 

        currentNode = currentNode.getNext(); 

       } 
      } 



     } 

我想在我的環路的限制將保持編譯器試圖訪問的指針不一定存在這就是我所理解的空指針異常。

如果有人能幫助我克服這個錯誤,以便我可以測試我的冒泡排序,我會非常感激!

回答

1

currentNode爲空或currentNode.getNext()返回null,這就是爲什麼你不能撥打getData()就可以了。在使用它們之前,您應該始終檢查您的節點是否存在空值。

+0

我已經添加了一個條件檢查,以確保它們在if語句中不爲null,但同樣的錯誤被拋出。還有什麼我可以做的? – ZAX

+0

它必須是其中的任何一個爲空。這就是Nul​​lPointerException的意思。或者你必須檢查你的'DoubleLinkedList'的實現。錯誤可能來自那裏。如果您在該行發生此錯誤,則兩個值中的任何一個都絕對爲空。 – davidXYZ

1

如果currentNodecurrentNode.getNext()正在或返回null不會導致問題,那麼我猜的getData()方法不返回原始數據類型(如int),但一個對象(如Integer)。

在這種情況下getData()可以返回null和出拳擊,一個包裝類實例來包裹它的原始類型的自動轉換,即需要用於<操作,將失敗,並導致NPE。