2012-03-14 15 views
0

自分のプログラムにバイナリ検索を実装しましたが、何らかの理由で私のreturn文の1つを完全に無視します。次のように問題のreturn文は次のとおりです。私は、Eclipseのデバッガを使用する場合return array[mid];再帰呼び出しが返されませんか?

、私は、それはif文を入力して見てリターンを実行し、それは次の2行をスキップすることができます: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

これは短くて完全なコンソールアプリで実証できますか? –

答えて

6

return binarySearch(..)が必要です。それ以外の場合は、0から0までの値が返され、nullが返されます。

コンパイラなしでreturn nullステートメントを削除すると、その関数が常に値を返すとは限りません。

2

内部binarySearch呼び出しの結果を返すのを忘れたからです。あなたはそうです

binarySearch 
    binarySearch 
     binarySearch 
      return array[mid] 
     return null 
    return null 
関連する問題