[英]Recursive call doesn't return?
我在程序中实现了二进制搜索,但是由于某种原因,它完全忽略了我的一个return语句。 有问题的return语句如下: return array[mid];
当我使用Eclipse的调试器时,可以看到它输入if语句,运行return,然后跳到以下两行: 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
您都需要在两个地方都return binarySearch(..)
,否则它将失败并返回null。
您应该能够删除return null
语句,而编译器不会告诉您该函数并不总是返回值。
这是因为您忘记了返回内部binarySearch调用的结果。 因此,你有
binarySearch
binarySearch
binarySearch
return array[mid]
return null
return null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.