2014-09-30 60 views
0

我需要做這樣的事情:循環反覆異常捕獲

while(prot.getProcessedTranscriptPositionFromAA(start) == null) start++; 

但由於prot拋出NullPointerException我不能循環這樣。我怎樣才能創建一個循環,捕獲NullPointerException,增量開始,並再次執行getProcessedTranscriptPositionFromAA,依此類推,直到getProcessedTranscriptPositionFromAA不會拋出NullPointerException(「沒關係」循環有可能是無限的)。

我從來沒有使用過goto,我甚至不知道如何使用的,但這樣的事情會以某種方式工作?:

 *here* 
     try{ 
      prot.getProcessedTranscriptPositionFromAA(start); 
     } 
     catch (NullPointerException e){ 
      start++; 
      goto *here* 
     } 
+0

只是爲了增加清晰度 - 在Java中'goto'不會做任何事情.. – 2014-09-30 10:48:46

回答

0

你應該避免NullPointerException從在第一時間被拋出。 A NullPointerException通常表示您的代碼中存在一個錯誤。

while (prot != null && prot.getProcessedTranscriptPositionFromAA(start) == null) start++; 

如果getProcessedTranscriptPositionFromAA本身可能拋出NullPointerException,你應該解決這個問題的方法了。

1

您不需要goto - 無論如何,在Java中沒有實現goto。你可以把try/catch放在循環中。當異常被捕獲時,循環可以繼續,有一件事與另一件事無關。

int start = 0; 
boolean isNotNull = false; 

while (!isNotNull) { 
    try { 
     prot.getProcessedTranscriptPositionFromAA(start); 
     isNotNull = true; 
    } 
    catch (NullPointerException e) { 
     start++; 
    } 
} 

我寫了這個假設,你沒有說明getProcessedTranscriptPositionFromAA()是如何實現的。然而,如果你確實控制了這個方法,或者知道這個人做了什麼,那麼當把索引傳遞給一個空的位置時,確保它不會拋出NullPointerException - 這不是一個好的API設計。它應該返回一些表明該位置爲空的東西。 There is a lot of lively disagreement檢查是否應該是null或指示空虛的非空對象;但無論如何,不​​要拋出異常。

+1

+1 - 雖然,您可能想要刪除其他過時的答案。 – 2014-09-30 10:51:54

+1

哎呀,不知道我是如何設法做出來的2.謝謝你們 - 刪除了。 – 2014-09-30 10:55:17

0

通常情況下,您會寫在類名的同一行上拋出NullPointerException。用於處理單個類中的多個NullPointerException。

0

你可以建立一個包裝方法,爲你捕獲NPE。

是這樣的:

public static boolean getSomething(ProtClass prot){ 
    try{ 
     //do something 
     return true; 
    }catch(NullPointerException e){ 
     return false; 
    } 
} 

,並使用在同時表達該功能。