2012-05-23 66 views
3

以下看起來像雜亂的代碼,但我想不出如何使它更整潔。有任何想法嗎?我想調用doSearch獲取10,20和30的值。如果沒有結果返回值,那麼我想嘗試下面的值。否則,退出。我知道這會起作用,但它是最可讀的方式嗎?這是在Java中重複方法調用的最簡潔方法嗎?

SearchResult result = doSearch("10"); 
if (result.getResults() == null) { 
    result = doSearch("20"); 
    if (result.getResults() == null) { 
    result = doSearch("30"); 
    if (result.getResults() == null) { 
     // put code to deal with lack of results here 
    } 
    } 
} 

回答

4

這裏有一個建議:(如在評論中所建議的馬爾科Topolnik)

SearchResult result = null; 
for (String attempt : "10,20,30".split(",")) 
    if ((result = doSearch(attempt)) != null) 
     break; 

if (result == null) { 
    // put code to deal with lack of results here 
} 

+0

檢查'i> = attempts.length + 1'沒有多大意義,因爲它永遠無法評估爲真。代碼要麼用'ArrayIndexOutOfBounds'打破,要麼檢查返回false。 –

+0

'int i; for(i = 0; i

+0

我可以說什麼,除非你是對的? :-)(更改爲CW) – aioobe

2

您可以將搜索字符串存儲在String []中,然後遍歷數組並調用doSearch()。

1
int [] searchValues = {10, 20, 30}; 


for(int i=0; i<searchValues.length; i++) { 
    SearchResult result = doSearch(searchValues[i]); 
    if (result.getResults() != null) { 
     return result; 
    } 
} 

// put code to deal with lack of results here 
1

我會像這樣的東西去:

SearchResult result = null; 
for (int i=10; i<=30 && result == null; i+=10) { 
    result = doSearch(i); 
} 
if (result == null) { 
    // throw a meaningful business exception here 
} 

由於數字是數字,我不認爲迭代他們的字符串表示是一個好主意。

相關問題