java - 二分查找中索引越界异常

标签 java binary-search indexoutofboundsexception

我对发生这种情况的具体位置感到困惑。我已经在纸上追踪了这个简单的代码并使用了计算机,但我无法弄清楚。在我的示例中,我创建了一个 {1, 2, 3, 4, 5} 数组,它对数字 4 和 5 产生了此错误。它对于数字 1、2 和 3 以及不在数组。请问有人可以帮忙吗?

public static int search(int[] ar, int num)
{
    int low=0;
    int hi=ar.length-1;
    int mid=(low+hi/2);
    while(hi>=low || mid<=low || mid>=hi )
    {
        if(ar[mid]==num)
        {
            return mid;
        }
        else if(ar[mid]>num)
        {
            hi=mid-1;
            mid=(low+hi/2);
        }
        else
        {
            low=mid+1;
            mid=(low+hi/2);
        }
    }
    return -1;
}

最佳答案

mid=(low+hi/2);

您需要使用 prantheses,以便在添加 low 和 hi 后进行除法。

mid=(low+hi) / 2;

此外,您的循环条件不应允许 mid 为 >high,因为这样它就不会因不在数组中的大量数字而终止。

关于java - 二分查找中索引越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761868/

相关文章:

java - 想要格式化 JTextArea 中的文本

java - 如何显示一条消息,告诉用户他们的猜测与随机生成的数字相差多远?

Java二分查找计数比较次数

java - Eclipse 中未收到 "Add unimplemented methods"错误

java - 用Java读取属性文件

Javascript 二分查找/插入性能

c++ - 二进制搜索代码未通过效率检查

java - 处理文件的小程序在本地工作但在网站上失败

java - 如何只用一个循环和一个内循环打印给定的图案?而不是使用 4 个循环

java - 尝试将 java if/else 转换为循环