2012-03-14 120 views
0

我在程序中實現了一個二進制搜索,但由於某種原因,它完全忽略了我的一個返回語句。返回語句如下:return array[mid];遞歸調用不返回?

當我使用Eclipse的調試器時,我可以看到它輸入if語句,運行返回,然後跳到下面兩行:binarySearch(array, key, low, mid - 1);return null;

任何想法爲什麼可能會發生?

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 
+0

你能在很短,但完整的控制檯應用程序證明這一點? – 2012-03-14 22:13:13

回答

6

在這兩個地方你都需要return binarySearch(..),否則會掉下來並返回null。

您應該能夠刪除return null語句,而不需要編譯器告訴您該函數並不總是返回一個值。

2

這是因爲您忘記了返回內部binarySearch調用的結果。因此,你必須

binarySearch 
    binarySearch 
     binarySearch 
      return array[mid] 
     return null 
    return null