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

Java数组删除首个指定元素并置末位为0的代码错误排查

代码错误说明

你写的代码存在以下几个核心问题:

  • 找到第一个匹配元素后,仅将当前位置赋值为下一个元素的值,没有完成后续所有元素的平移操作,也没有终止遍历,导致后面的元素没有依次前移。你测试用例中找到索引为1的元素5后,只把arr[1]改成了arr[2]的7,索引2到4的元素完全没有移动,所以输出结果里索引2的位置还是原来的7。
  • arr[toRemove] = 0的逻辑完全错误:需求要求操作完成后将数组最后一个元素设为0,而你这里是把下标为toRemove的值的位置设为0,本次测试用例里toRemove刚好是5,数组长度是6下标最大为5,刚好把最后一位设为0,但如果toRemove的值大于等于数组长度,会直接抛出数组下标越界异常。
  • 循环逻辑存在越界风险:循环条件是i <= arr.length - 1,当i遍历到最后一个元素时,代码内部取arr[i+1]的操作会访问到数组长度的下标,直接触发越界异常。
  • 没有做边界判断:如果传入的数组是空数组或者null,直接访问arr.length会抛出空指针异常,不符合需求中数组为空时方法无效果的要求。

正确实现参考

public static void remove(int[] arr, int toRemove) {
    // 边界判断:空数组直接返回
    if (arr == null || arr.length == 0) {
        return;
    }
    int targetIndex = -1;
    // 找第一个匹配的下标
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == toRemove) {
            targetIndex = i;
            break;
        }
    }
    // 没找到匹配项直接返回
    if (targetIndex == -1) {
        return;
    }
    // 后续元素依次前移
    for (int i = targetIndex; i < arr.length - 1; i++) {
        arr[i] = arr[i + 1];
    }
    // 最后一位设为0
    arr[arr.length - 1] = 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:24:03