二进制搜索必须 return 一个值,尽管一个值是 returned

Binary search must return a value, though a value is returned

我的任务是使用递归在 Java 中创建二进制搜索。但是,即使我指定了 return 值,它仍然告诉我我必须 return 一个 int 结果。以下是我的代码的相关部分:

我尝试在 if-else 语句之外添加一个 return,结果却收到 WhosebugError。

    result = binarySearch(numbers, 0, numbers.length-1, search);

    if(result==-1)
        System.out.println("Value not found.");
    else
        System.out.println(search + " was found at index " + result);

}

public static int binarySearch(int n[], int f, int l, int val) {        
    if(f>l) 
        return -1;
    else {
        int mid = (f+l)/2;
        if(val == mid)
            return n[mid];

        else {
            if(val < mid)
                binarySearch(n, f, mid-1, val);
            if(val > mid)
                binarySearch(n, f, mid+1, val);
        }

    }
}

我预期如下:从用户收集值 search 并传递到 binarySearch 方法。然后 binarySearch 方法应从起始值 0 到最终值搜索我的 int 数组 numbers 以找到该值。在 binarySearch 方法中,我相信我的逻辑是正确的。当初始低值大于初始高值时,表示搜索完成,没有找到结果,所以return-1。否则,该项目在数组中,因此创建一个值 mid 来设置搜索的中间位置。如果要搜索的值等于 middle,return 找到它的索引。如果该值小于中间值,则减少高值并运行再次搜索,因为数字必须在中间的左边。如果该值大于中间值,则增加它并 re运行 因为它必须在右边。我对此的理解是否正确?为什么它无法识别 if-else 语句中的 return?

如有任何帮助,我们将不胜感激。谢谢

逻辑是正确的,你只需要在递归完成后return,把比较valmid的两个替换成if/else。修改后的递归函数是这样的:

public static int binarySearch(int n[], int f, int l, int val) {
    if(f>l){
        return -1;
    } else {
        int mid = (f+l)/2;
        if(val == mid) {
            return n[mid];
        } else {
            if(val < mid) {
                return binarySearch(n, f, mid-1, val);
            } else {
                return binarySearch(n, mid+1, l, val);
            }
        }
    }
}

比较 val 与 n[mid],而不是 mid。