You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java二分查找(Binary Search)查找第5个元素时抛出数组越界异常

数组二分查找越界问题:原因与解决方案

兄弟,我来帮你拆解这个问题——你遇到的ArrayOutOfBoundsException本质是数组索引的0起始特性和二分查找边界逻辑错误导致的,跟if-else没关系,咱们一步步说:

核心原因分析

1. 数组索引的认知误区

Java数组是0-based索引(从0开始计数),当你创建一个含5个元素的数组时,有效索引范围是0~4,而不是1~5。如果你口中的“第5个元素”对应的索引是5,直接访问arr[5]必然触发越界。

2. 二分查找方法的边界初始化错误

这是最可能的元凶:标准二分查找的high边界应该初始化为arr.length - 1,如果你的binarySearch方法里把high设成了arr.length,那么当查找最后一个元素(比如第5个元素,索引4)时,循环中计算出的mid有可能等于arr.length(也就是5),此时访问arr[mid]就会触发越界。

举个错误的反例:

// 错误的边界初始化
int high = arr.length; // 应该是arr.length - 1

当数组size=5时,high=5,循环中如果low=4、high=5,mid=(4+5)/2=4,这时候没问题,但如果后续逻辑调整low=mid+1=5,此时low<=high(5<=5)成立,mid=5,访问arr[5]直接报错。

3. 你的数组输入方法不完整

你给出的arrayEntry()代码没有完成元素赋值和数组返回,这会导致后续使用的数组可能未初始化,但你说其他测试用例正常,所以这个不是核心问题,但必须修正。

解决方案

1. 修正索引认知

如果你是手动指定查找“第5个元素”,请传入索引4而非5。

2. 修复二分查找的边界逻辑

这里给你一个标准的、不会越界的二分查找实现:

public static int binarySearch(int[] arr, int target) {
    // 先判断数组合法性,避免空指针或空数组
    if (arr == null || arr.length == 0) {
        return -1;
    }
    int low = 0;
    int high = arr.length - 1; // 关键:这里必须是length-1
    while (low <= high) {
        // 用low + (high-low)/2代替(low+high)/2,避免整数溢出
        int mid = low + (high - low) / 2;
        if (arr[mid] == target) {
            return mid; // 找到目标,返回索引
        } else if (arr[mid] < target) {
            low = mid + 1; // 目标在右半区
        } else {
            high = mid - 1; // 目标在左半区
        }
    }
    return -1; // 未找到目标
}

重点注意high的初始值,以及循环条件low <= high(保证最后一个元素能被检查到)。

3. 补全数组输入方法

你的arrayEntry()缺少元素赋值和返回逻辑,修正后如下:

private static int[] arrayEntry() {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter the size of the array: ");
    int size = scan.nextInt();
    int[] arr = new int[size];
    System.out.println("Enter the items...");
    // 循环给每个数组元素赋值
    for (int i = 0; i < size; i++) {
        arr[i] = scan.nextInt();
    }
    scan.close(); // 关闭Scanner,避免资源泄漏
    return arr; // 返回初始化好的数组
}

为什么if-else没用?

if-else是用来处理逻辑分支的,但你的问题是索引本身超出了数组的有效范围,if-else并没有检查索引是否合法,也没有修正二分查找的边界错误,所以自然解决不了问题。

内容的提问来源于stack exchange,提问作者Kumar Shivam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:21:42