Java 二进制搜索方法需要更高效 inti=0; int finalVal=0; 而(我

Java 二进制搜索方法需要更高效 inti=0; int finalVal=0; 而(我,java,boolean,binary-search,Java,Boolean,Binary Search,基本上,我用一个布尔值大于,进行二元搜索,它询问数字是否大于x?你可以回答“是”或“否”。每次迭代,从lowerLimit到upperLimit的值数组都会被减半,方法是将以前的平均值变成新的lowerLimit或upperLimit 问题是,一旦它将数组缩小到只有两个或三个值,它将询问该数字是否大于x?对于同一数字多次,例如: 是否大于56?是 是否大于57?否 是否大于56?否 号码是56 我很确定这是因为平均值被四舍五入为一个整数。它一直工作到最后,我只是不知道如何缓解最后一个小问题。我想

基本上,我用一个布尔值
大于,
进行二元搜索,它询问数字是否大于x?你可以回答“是”或“否”。每次迭代,从lowerLimit到upperLimit的值数组都会被减半,方法是将以前的平均值变成新的lowerLimit或upperLimit

问题是,一旦它将数组缩小到只有两个或三个值,它将询问该数字是否大于x?对于同一数字多次,例如:

是否大于56?

是否大于57?

是否大于56?

号码是56


我很确定这是因为平均值被四舍五入为一个整数。它一直工作到最后,我只是不知道如何缓解最后一个小问题。

我想你应该有一个基本情况,lowerLimit==upperLimit,如果它只是返回那个数字,如果不是,调用isGreaterThan函数

   int i = 0;
    int finalVal = 0;
    while (i < this.maxQuestions) {
        if (this.isGreaterThan(average(lowerLimit, upperLimit))) {
            lowerLimit = average(lowerLimit, upperLimit);
            finalVal = upperLimit;
        } else {
            upperLimit = average(lowerLimit, upperLimit);
            finalVal = lowerLimit;
        }
        i++;
    }
    System.out.println("The number you picked was: " + finalVal);