3

以下はごちゃごちゃしたコードのように見えますが、これをきれいにする方法が思い浮かびません。何か案は?値 10、20、および 30 に対して doSearch を呼び出したいと考えています。値に対して結果が返されない場合は、次の値を試してみたいと思います。それ以外の場合は、終了してください。私はこれがうまくいくことを知っていますが、それは最も読みやすい方法ですか?

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

4 に答える 4

4

ここに提案があります:

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
}

(コメントでMarko Topolnikが示唆したように。)

于 2012-05-23T09:55:11.830 に答える
2

検索文字列を String[] に格納してから、配列をループして doSearch() を呼び出すことができます。

于 2012-05-23T09:53:36.213 に答える
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
}

数値は数値であるため、文字列表現を反復処理することは良い考えではないと思いました。

于 2012-05-23T10:16:08.340 に答える
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
于 2012-05-23T09:55:18.743 に答える