2017-03-24 49 views
-1

我們開始在課堂上的名單上工作,並有這項任務將數字從列表中分離出來,沒有創建一個新列表。所以我在列表中使用了sepNum標籤。但它返回nullPointer,我不明白爲什麼。 nullPointer出現在separateNumbers方法的第二行。元素首先存在並且爲!null。列表nullPointer

public void separateNumbers() { 
    sepNum = first; 
    while (sepNum.info < 0 || sepNum.info > 9) 
     sepNum = sepNum.point; 

    Element previous = sepNum; 
    Element current = sepNum.point; 
    while (current != null) { 
     if (current.info < 0 || current.info > 9){ 
      previous.point = current.point; 
      current = current.point; 
     } else { 
      previous = current.point; 
      current = current.point; 
     } 
    } 
} 

這裏的Element類:

 class Element { 
     char info; 
     Element point; 

     public Element (char ch) { 
      this.info=ch; 
      this.point=null; 
     } 

     public String toString() { 
      return info+(point == null ? " " + point : ""); 
     } 
    } 

我一直在努力,現在摸不着頭腦了幾個小時。你們能幫忙嗎?

+2

你有堆棧跟蹤嗎?如果它發生在第二行,那意味着'第一個'(不管那是什麼)是空的。 –

+0

'first'的值必須爲空 - 您是否100%確定情況並非如此。請隨時添加更多證明(也許是調用方法) –

+2

@SteveSmith不一定。由於sepNum變量在循環中被設置爲sepNum.point,所以sepNum.point也可能爲空。然後循環會在以下迭代中拋出NPE –

回答

1

您的問題通過while循環第二次出現。我用大括號中的值替換了變量。

public void separateNumbers() 
{ 
    sepNum = {info: 'a', point: null}; 
    while ({'a'} < 0 || {'a'} > 9) //sepNum.info 
     sepNum = {null};   //sepNum.point 

你再回去繞到while循環再次測試條件:

while ({null}.info < 0 || {null}.info > 9) //sepNum.info 

因爲你deferencing空,你會得到一個空指針異常。