编译器如何找到丢失的return语句?

时间:2019-01-24 07:03:02

标签: java return java-11

我具有在数组中查找元素的功能(二进制搜索)。 我收到一个错误消息,说有一个“丢失的返回语句”。 (评论部分)

  

编译器如何理解缺少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;
    }

1 个答案:

答案 0 :(得分:3)

  

编译器如何找到所有执行路径?

它不是很聪明,它无法检测逻辑上永远无法到达的分支,它只是希望所有分支都以2019-01-24 01:36:25,234 结尾。请参见a case where that is not "clever enough"的另一个问题。

在您的情况下,您可能会发现return条件可能都不成立,因此您可能会陷入方法的结尾,并且希望在那里看到if

在您的情况下,这种推理也是正确的:据我所知,它很可能会遍及所有分支机构。