首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >语句在if中返回语句,否则if语句不工作。

语句在if中返回语句,否则if语句不工作。
EN

Stack Overflow用户
提问于 2018-07-11 04:29:43
回答 5查看 592关注 0票数 0

我无意中发现了代码中的一些问题,据说返回会阻止我的方法,但在我的情况下并非如此。我试着制作了一种名为"binarySearch“的方法,它应该做它应该做的事情。

代码语言:javascript
复制
public int binarySearch(int lowIndex, int highIndex, int[] arr, int val) {
    int middleIndex = (lowIndex + highIndex ) / 2;
    if(arr[middleIndex] < val) {
        lowIndex = middleIndex;
    } else if (arr[middleIndex] > val) {
        highIndex = middleIndex;
    } else {
        return middleIndex;
    }
    binarySearch(lowIndex, highIndex, arr, val);
    return 0;
}

问题是,如果我已经找到了搜索值驻留的索引,else语句将返回它并停止。但是,我总是得到"0",这是我为默认返回return 0设置的值。因此,为了澄清起见,我在else语句上添加了一些文本,以确保它执行并返回middleIndex,然后文本出现,所以基本上我的循环进入了else语句,希望返回middleIndex,但它没有。也许递归和这事有关,但我不知道你们能不能帮我。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-11 04:38:07

因为您的方法的签名是public int binarySearch,这意味着您应该从binarySearch方法的递归调用返回int。在此方法的适当实现中,您不应该真正地使用return 0

票数 1
EN

Stack Overflow用户

发布于 2018-07-11 04:38:06

您必须返回递归的结果。您可以参考下面所示的代码来了解您所做的错误。

代码语言:javascript
复制
  // Returns index of x if it is present in arr[l..
    // r], else return -1
    int binarySearch(int arr[], int l, int r, int x)
    {
        if (r>=l)
        {
            int mid = l + (r - l)/2;

            // If the element is present at the 
            // middle itself
            if (arr[mid] == x)
               return mid;

            // If element is smaller than mid, then 
            // it can only be present in left subarray
            if (arr[mid] > x)
               return binarySearch(arr, l, mid-1, x);

            // Else the element can only be present
            // in right subarray
            return binarySearch(arr, mid+1, r, x);
        }

        // We reach here when element is not present
        //  in array
        return -1;
    }

有关BinarySearch及其实现的更多信息,您可以按照链接

票数 0
EN

Stack Overflow用户

发布于 2018-07-11 04:38:27

这里是用于二进制搜索的迭代java代码,您的代码有一些缺陷。

代码语言:javascript
复制
int binarySearch(int arr[], int x) {
    int l = 0, r = arr.length - 1;

    while (l <= r) {

        int m = l + (r-l)/2;

        if (arr[m] == x)
            return m;

        if (arr[m] < x)
            l = m + 1;

        else
            r = m - 1;
    }

    return -1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51277278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档