2012-03-28 108 views
-2

我有這樣的遞歸方法:NullPointerExceprion在遞歸方法

public Hund getMor(int id) { 
    Hund barn = getHund(id); 
    int idMor = barn.getId_mor(); 
    Hund mor = getHund(idMor); 

    return mor; 
} 

public String getMorTre(int id) { 
    if (id == 0) { 
     return null; 
    } 
    if (!existHund(id)) { 
     return "Hunden du søkte etter finnes ikke"; 
    } else { 
     if (id == 0) { 
      return null; 
     } else { 
      Hund mor = getMor(id); 
      MinRamme.jta.append(mor.toString() + "\n"); 
      int morId = mor.getId(); 
      return getMorTre(morId); 
     } 

    } 
} 

我曾嘗試返回null如果id爲0,除去空指針,但這不起作用。有沒有人有辦法解決嗎?

NPE:

Exception in thread "AWT-EventQueue -0" java.lang.nullpointerexception 
at Arkiv.getMorTre(Arkiv.java:209) 
at Arkiv.getMorTre(Arkiv.java:211) 
at Arkiv.getMorTre(Arkiv.java:211) 
at MinRamme$4.actionPerformed(MinRamme.java:89) <37 internal calls> 
+2

請包括例外。什麼行給出錯誤? – Ishtar 2012-03-28 10:22:20

+1

您在哪一行獲得NPE? – assylias 2012-03-28 10:22:28

+1

我們不知道什麼是拋出異常。請發佈簡短但完整的*程序來證明問題。 – 2012-03-28 10:22:39

回答

3

在什麼地方發生的NullPointerException?這將有助於......話雖這麼說:

裏面你else子句,您

if (id==0) { 

是沒用的,因爲你正在測試,在開頭和ID沒有改變。

我認爲你需要檢查是否

getMother(id) 

返回null,這可能是你在哪裏得到空指針...但你可以確認現在,你能不能?

+0

謝謝,檢查getMother(id)== null是否使NPE消失! – Twistar 2012-03-28 10:32:10

2

很可能(但難以確認,直到你讓我們知道線拋出NPE),其產生的NPE線路

MyFrame.jta.append(mother.toString() + "\n"); 

,因爲母親是空的。你可以改變你的代碼到這個:

Dog mother = getMother(id); 
if (mother == null) { 
    //do something 
} 
-1

它,因爲你的例外是在mother.toString()方法..

試試這個

try 
{ 
MyFrame.jta.append(mother.toString() + "\n"); 
}catch(NullPointerException ignore){} 
+0

最好檢查'if(mother!= null)'而不是捕獲並忽略異常。性能,可讀性... – surfen 2012-03-28 10:31:01

1

真的是沒有足夠的信息在這裏。你在哪裏得到空指針?

,如果像我懷疑,它在這裏:

MyFrame.jta.append(mother.toString() + "\n"); 

然後,你需要確定,調試通過,那它絕對母親是空。如果你已經這樣做了,那麼你可以絕對肯定你的getMother(id);返回null,爲你傳入的ID。

如果我是你,我會爲getMother(id)方法創建一個單元測試,並傳入導致失敗的id。

如果您不知道什麼id值導致問題,那麼至少應該在一些System.out.print()語句中粘貼以查明發生了什麼。儘管如此,你最好使用一些日誌框架,比如log4j。

希望這會有所幫助。