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

标签 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);

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

最佳答案

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

应该是:

int mid = (min + max) / 2;

而不是

int mid = min + max / 2;

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

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

关于java - 为什么我的二进制搜索会产生 ArrayIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33464667/

相关文章:

java - 在Java中的排序字符串数组中查找以指定字符串开头的第一个元素

python - 为什么我不能为递归二进制搜索函数设置默认参数?

python - Dataframe 中两个对象之间的最小差异

python - 如何更正用于比较包含按键的两个字符串的算法?

java - 安卓 PHP 获取

java - 二叉搜索树 - Java

java - 测量 Java 算法的性能

使用比较器的 C# 对象列表二进制搜索

java - 是否可以听到蓝牙按钮的点击?

java - 如何进行非事务性 Spring 测试