Binarysearch-Algorithm 代码问题

Issue with Binarysearch-Algorithm code

所以我一直在这段代码中寻找我的错误 10-20 分钟,但我仍然找不到任何错误。但是我发现(在最终添加系统输出之后)我的 "middle" Integer 出了点问题,因为它小于最低数字 (start)

感谢任何帮助!

代码如下:

public class BinaereSuche {

public static int intList[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512};


public static int bineareSuche(int number){
    int start = 0;
    int end = intList.length -1;
    boolean found = false;

    while(found == false){ 
        int middle = (end - start) / 2; 

        if(number > intList[middle]){ 
            start = middle + 1;
        }else if(number < intList[middle]){ 
            end = middle - 1;
        }else
            return middle;
        found = true;
        System.out.println(intList[start] + " <--> " + intList[end] + " => " + intList[middle]);
    } return -1;
}

public static void main(String[] args) {
    System.out.println(bineareSuche(32));
  }
}

sysout 给我32 <--> 512 => 16 -1 其中 32 是起始编号,512 是结束编号,16 是 512 和 32 之间的中间编号,这显然是错误的。

p.s。我一直在寻找关于 SO 的答案,但仍然无法找到我的问题——如果有人对它的工作原理感到好奇(如果你还不知道):Here's a picture

我认为这行是错误的:

int middle = (end - start) / 2; 

尝试:

int middle = start + (end - start) / 2; 

考虑结束=10,开始=9。你的方法将计算中间=0。