首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA-13如果返回不中断函数则正确

JAVA-13如果返回不中断函数则正确
EN

Stack Overflow用户
提问于 2021-02-11 06:42:19
回答 1查看 51关注 0票数 0

我编写了一个二进制搜索算法,我对这里的逻辑有点不理解;我正在检查这个列表是否包含带有递归函数"containsDigit“的中间元素67的值。在本例中,67是结果部分中的列表值,输入if语句,但是由于某种原因,没有返回'true‘,而是函数选择为false。

有人能告诉我这是为什么吗?

代码语言:javascript
复制
import java.util.Arrays;

public class Binary {
    public boolean containsDigit (int [] numlist, int digit){
        int middle = (int )Math.ceil(numlist.length/2);
        int middle_val = numlist[middle];
        System.out.println(Arrays.toString(numlist));
        System.out.println(digit);
        System.out.println(middle_val);
        if (middle_val == digit){
            System.out.println("should return true here");
            return true;
        }
        else if (numlist[middle]>digit){
            containsDigit(Arrays.copyOfRange(numlist,0, middle-1), digit);
        }

        else if (numlist[middle]<digit){
            containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
        }
         return false;
    }

    public static void main(String[] args) {
    Binary obj = new Binary();
    int [] numlist = {1, 2, 3, 5, 23, 67, 90};
    boolean contains = obj.containsDigit(numlist, 67);
        System.out.println("returns "+contains);
    }
}

结果:

编辑:

我找出了原因,我没有返回函数结果,所以在找到真后没有函数中断,它选择了false,谢谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-11 06:49:11

您没有使用递归调用返回的值。

在代码的这一部分中的示例:

代码语言:javascript
复制
else if (numlist[middle]<digit){
    containsDigit(Arrays.copyOfRange(numlist,middle+1, numlist.length), digit);
}
return false;

containsDigit的返回值根本不被使用--即使调用在true中产生,在最后总是返回false

必须测试数组是否只有一个值来停止递归,如果这是正确的value;

  • otherwise,则返回递归调用的值

  • 使用调试器一步一步地执行程序,并查看

上发生了什么

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

https://stackoverflow.com/questions/66149916

复制
相关文章

相似问题

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