我具有在数组中查找元素的功能(二进制搜索)。 我收到一个错误消息,说有一个“丢失的返回语句”。 (评论部分)
编译器如何理解缺少return语句?
仅使用“ if”时,编译器如何查找所有执行路径。没有别的,如果正在实施
public static int rank(int key, int []a, int lo, int hi)
{
if(lo>hi) return -1;
int mid= lo+(hi-lo)/2;
if(key<a[mid]) return rank(key,a,lo,mid-1);
if(key>a[mid]) return rank(key,a,mid+1,hi);
//else return mid;
}
答案 0 :(得分:3)
编译器如何找到所有执行路径?
它不是很聪明,它无法检测逻辑上永远无法到达的分支,它只是希望所有分支都以2019-01-24 01:36:25,234
结尾。请参见a case where that is not "clever enough"的另一个问题。
在您的情况下,您可能会发现return
条件可能都不成立,因此您可能会陷入方法的结尾,并且希望在那里看到if
。
在您的情况下,这种推理也是正确的:据我所知,它很可能会遍及所有分支机构。