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

为什么这段Java二分查找代码在VS Code编辑器中无法执行?

问题排查与修复

你的代码存在5个核心错误,以下是逐点说明:

  • 1、二分查找的前置要求是查询数组必须为有序数组,你当前使用的测试数组{2,45,-21,56,23}是乱序状态,无法用二分查找得到正确结果。
  • 2、语法错误:你贴出的代码末尾多了一个多余的闭合大括号,会直接触发编译失败。
  • 3、mid计算逻辑错误:你写的mid=start+end/2不符合运算优先级,会先计算end/2再和start相加,正确的计算方式是mid = start + (end - start) / 2,该写法同时可以避免两个大int相加的溢出问题。此外mid计算必须放在while循环内部,每次区间调整后重新计算新的中间位置,你现在只在进入循环前计算一次mid,完全无法适配调整后的查找区间。
  • 4、区间边界调整逻辑完全错误:当target小于中间值时,应该调整右边界end = mid - 1,而不是修改mid的值;当target大于中间值时,应该调整左边界start = mid + 1,你当前的写法只会修改mid,不会改变start和end的值,会直接陷入死循环甚至触发数组索引越界。
  • 5、Java规范要求类名必须和文件名完全一致,你的类名为binsearch,则保存的代码文件名必须为binsearch.java,否则会触发编译错误。

修正后的完整代码

public class binsearch {
    public static void main(String args[])
    {
        // 先对数组排序,满足二分查找的有序要求
        int arr[]={2,45,-21,56,23};
        java.util.Arrays.sort(arr);
        int target=45;
        int answer=binarysearch(arr, target);
        System.out.println(answer);

    }
    static int binarysearch(int arr[],int target)
    {
        int start=0;
        int end=arr.length-1;
        // mid放在循环内每次计算
        while(start<=end)
        {
            int mid=start + (end - start)/2;
            if(target<arr[mid])
            {
                // 调整右边界
                end=mid-1;
            }
            else if(target>arr[mid])
            {
                // 调整左边界
                start=mid+1;
            }
            else
            {
                return mid;
            }
        }
        return -1;
    }
}

内容的提问来源于stack exchange,提问作者Rachel Peters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:04