为什么我的二进制搜索会产生 ArrayIndexOutOfBoundsException?

Why does my binary search produce an ArrayIndexOutOfBoundsException?

我正在使用 Eclipse。这是我的代码:

private int binarySearch(int[] arraySorted, int value, int min, int max) {
    if (max < min) {
        return -1;
    } else {
        int mid = min + max / 2;
        if (value > arraySorted[mid]) // LINE 22
            return binarySearch(arraySorted, value, mid + 1, max);
        else if (value < arraySorted[mid])
            return binarySearch(arraySorted, value, min, mid - 1);
        else
            return mid;
    }
}

这是我的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at Launcher.binarySearch(Launcher.java:22)
at Launcher.binarySearch(Launcher.java:23)
at Launcher.main(Launcher.java:14)

我这样调用方法:

int[] arraySorted = { 0, 1, 2, 2, 4, 7, 99 };
binarySearch(arraySorted, searchNum, 0, arraySorted.length - 1);

谁能知道我为什么会收到这个?如何使用调试器识别问题?

由于缺少括号,中间索引元素计算错误。

应该是:

int mid = (min + max) / 2;

而不是

int mid = min + max / 2;

计算,添加不必要的括号,min + (max / 2)

您可以使用自己喜欢的调试器对代码进行逐步分析,从而轻松找出问题所在。