如果 return 不破坏函数,JAVA-13 正确

JAVA-13 correct if return doesn't break function

我正在写一个二进制搜索算法,我对这里的逻辑有点迷茫;我正在使用递归函数“containsDigit”检查此列表是否包含值 67 作为中间元素。在这种情况下,67 是结果部分中看到的中间列表值,并且输入了 if 语句,但是由于某种原因,没有 'true' returned,而是函数选择 false。

谁能告诉我这是为什么?

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

结果:

编辑:

找到原因了,我没有return函数结果,所以发现true后没有函数break就选择了false,谢谢帮助!

您没有使用 return 由递归调用编辑的值。

您的那部分代码中的示例:

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

根本没有使用 containsDigit 的 returned 值 - 即使调用结果为 true,最后 false 始终是 returned.

  1. 必须测试数组是否只有一个值来停止递归并且return如果那是正确的值;
  2. 否则return递归调用的值
  3. 使用调试器一步步执行程序,看看是怎么回事