3

The following looks like messy code, but I can't think how to make it neater. Any ideas? I want to call doSearch for values of 10, 20 and 30. If no results are returned for a value, then I want to try for the following value. Otherwise, just exit out. I know this would work, but is it the most readable way?

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
    }
  }
}
jmj
  • 237,923
  • 42
  • 401
  • 438
edwardmlyte
  • 15,937
  • 23
  • 58
  • 83

4 Answers4

4

Here's a suggestion:

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
}

(as suggested by Marko Topolnik in the comments.)

aioobe
  • 413,195
  • 112
  • 811
  • 826
2

You can store the search strings in a String[], then loop through the array and call doSearch().

nhahtdh
  • 55,989
  • 15
  • 126
  • 162
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
kgiannakakis
  • 103,016
  • 27
  • 158
  • 194
1

I'd go with something like this:

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
}

Since numbers are numbers, I didn't think that iterating through their String representations is a good idea.

maksimov
  • 5,792
  • 1
  • 30
  • 38