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_
相关产品推荐
相关产品推荐

