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

时间:2015-11-01 16:55:05

标签: java algorithm binary-search

我正在使用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);

任何人都可以弄明白为什么我会这样做吗?如何使用调试器识别问题?

1 个答案:

答案 0 :(得分:1)

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

应该是:

int mid = (min + max) / 2;

而不是

int mid = min + max / 2;

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

通过使用您喜欢的调试器对代码进行逐步分析,您可以轻松找到问题所在。