Java 二进制搜索必须返回一个值,尽管返回了一个值

Java 二进制搜索必须返回一个值,尽管返回了一个值,java,recursion,binary,return,binary-search,Java,Recursion,Binary,Return,Binary Search,我的任务是使用递归在Java中创建二进制搜索。然而,即使我指定了返回值,它仍然告诉我必须返回一个int结果。以下是我的代码的相关部分: 我尝试在if-else语句之外添加一个返回,结果收到一个StackOverflowerError result = binarySearch(numbers, 0, numbers.length-1, search); if(result==-1) System.out.println("Value not found.");

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

我尝试在if-else语句之外添加一个返回,结果收到一个StackOverflowerError

    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);
        }

    }
}
result=binarySearch(数字,0,数字。长度-1,搜索);
如果(结果==-1)
System.out.println(“未找到值”);
其他的
System.out.println(在索引“+结果”处找到搜索+”;
}
公共静态int二进制搜索(int n[],int f,int l,int val){
如果(f>l)
返回-1;
否则{
int mid=(f+l)/2;
如果(val==mid)
返回n[mid];
否则{
如果(valmid)
二进制搜索(n,f,mid+1,val);
}
}
}
我期望如下:从用户收集值搜索并将其传递到binarySearch方法中。然后,binarySearch方法应该从起始值0到最终值搜索我的int数组编号,以找到该值。在binarySearch方法中,我相信我的逻辑是正确的。当初始低值大于初始高值时,表示搜索已完成,未找到任何结果,因此返回-1。否则,该项位于数组中,因此创建一个值mid以设置搜索的中间位置。如果要搜索的值等于中间值,则返回找到它的索引。如果值小于中间值,则减小高值并再次运行搜索,因为数字必须位于中间值的左侧。如果该值大于中间值,请增加该值,然后重新运行,因为它必须向右。我对这一点的理解正确吗?为什么它不能识别if-else语句中的返回


任何帮助都将不胜感激。谢谢。

逻辑正确,您只需在递归完成后返回,并用if/else替换比较
val
mid
。修改后的递归函数如下所示:

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);
            }
        }
    }
}
publicstaticintbinarysearch(intn[],intf,intl,intval){
如果(f>l){
返回-1;
}否则{
int mid=(f+l)/2;
如果(val==mid){
返回n[mid];
}否则{
如果(val
将val与n[mid]进行比较,而不是mid。

在递归情况下,您实际上没有返回任何内容。只有跑步。投票结束话题,因为你的问题是一个打字错误。@JoeC道歉,但是你有没有想过不是每个人都像你一样理解问题?对你来说很明显的事情对别人来说可能不明显。我不是在寻找关于答案的讲义,我认为很明显,我想要一个适当的解释,这样我才能理解和改进。我花了时间通过我的代码写下我的逻辑思维过程,这样我就可以被纠正,如果我错了。除了丢失<代码>返回<代码>,你可以将中间索引与你正在搜索的值进行比较,而不是中间索引中的值。我必须返回int类型的内容。我用正确的代码编辑了响应以删除编译错误我现在从方法的最后一行返回StackOverflower错误:
return binarySearch(n,f,mid+1,val)。这是递归的错误,不是吗?我真的找不到我的错误。是的,这是递归逻辑本身的问题。具体来说,在二进制搜索的第二个调用中,应该是
returnbinarysearch(n,mid+1,l,val)。我编辑了代码以反映它。