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

Java实现删除数组最大值功能代码运行异常求排查

问题排查
  • 第一处逻辑错误:缺失「查找数组最大值」的前置步骤,你代码中的判断条件a[i] > a[j]完全不符合需求,这里的j是用来给返回数组b计数的下标,和最大值判断没有任何关联。
  • 第二处赋值错误:if分支中你给b数组赋值的是a[j]而非当前遍历到的原数组元素a[i],且仅在满足错误的if条件时才赋值,会导致b数组大部分位置都是未赋值的默认0值。
  • 第三处边界问题:没有判断输入数组的长度,如果输入数组长度为1,初始化b数组时会直接生成长度为0的空数组,建议提前做边界校验。
修复后代码

如果需要删除数组中所有的最大值(包含重复的最大值场景),可以用以下实现:

public static int[] deleteHighestNum(int a[]) {
    // 边界校验
    if (a == null || a.length <= 1) {
        return new int[0];
    }
    // 第一步:遍历找到最大值
    int max = a[0];
    for (int num : a) {
        if (num > max) {
            max = num;
        }
    }
    // 第二步:统计非最大值的元素数量,确认返回数组的长度
    int count = 0;
    for (int num : a) {
        if (num != max) {
            count++;
        }
    }
    // 第三步:赋值生成返回数组
    int[] b = new int[count];
    int index = 0;
    for (int num : a) {
        if (num != max) {
            b[index++] = num;
        }
    }
    return b;
}

如果仅需要删除第一个出现的最大值,忽略后续重复的最大值,可以用更简洁的实现:

public static int[] deleteHighestNum(int a[]) {
    if (a == null || a.length <= 1) {
        return new int[0];
    }
    // 查找第一个最大值的下标
    int maxIndex = 0;
    for (int i = 1; i < a.length; i++) {
        if (a[i] > a[maxIndex]) {
            maxIndex = i;
        }
    }
    // 跳过最大值下标赋值新数组
    int[] b = new int[a.length - 1];
    for (int i = 0, j = 0; i < a.length; i++) {
        if (i != maxIndex) {
            b[j++] = a[i];
        }
    }
    return b;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:48:01