Reputation: 698
I implemented a binary search into my program, but for some reason, it completely ignores one of my return statements. The return statement in question is as follows:return array[mid];
When I use Eclipse's debugger, I can watch it enter the if statement, run the return, and then it skips to the following two lines: binarySearch(array, key, low, mid - 1);
, return null;
.
Any idea as to why that might be happening?
public Entry<K, V> binarySearch(Entry<K,V>[] array, K key, int low, int high) {
if(low >= high) {
Entry<K,V> notFound = new EntryNode<K,V>(null, null);
return notFound;
} else {
int mid = (low + high) / 2;
if(key.equals(array[mid].getKey()))
return array[mid];
else if(comparator.compare(key, array[mid].getKey()) < 0)
binarySearch(array, key, low, mid - 1);
else
binarySearch(array, key, mid + 1, high);
} //End else statement
return null;
} //End binarySearch method
Upvotes: 0
Views: 195
Reputation: 691625
That's because you forgot to return the result of the inner binarySearch calls. You thus have
binarySearch
binarySearch
binarySearch
return array[mid]
return null
return null
Upvotes: 2
Reputation: 2066
You need return binarySearch(..)
in both places, otherwise it will fall through and return null.
You should be able to remove the return null
statement without the compiler telling you the that function does not always return a value.
Upvotes: 6