Java按值删除数组指定整数(含重复)的代码问题排查与修正
问题排查与正确实现方案
原代码错误分析
- sum变量作用失效:
sum在循环内部定义,每次循环都会重置为0,无法累计需要偏移的元素数量,导致遇到要删除的值时,偏移逻辑完全不起作用。 - 遗漏最后一个元素:循环条件
i < original.length - 1直接跳过了原数组的最后一个元素,所以原数组的5从未被处理,自然不会出现在结果中。 - 元素替换逻辑错误:遇到目标值时直接将下一个元素写入当前位置,但没有整体前移后续元素,导致后续元素被重复写入(如示例中的
3被写入两次),未填充的数组位置保留默认值0。
正确实现方案
核心思路:用一个独立的索引指针跟踪新数组的有效元素位置,遍历原数组所有元素,将不等于目标值的元素依次写入新数组,最后根据有效元素数量生成最终结果(无需额外List,符合要求)。
import java.util.Arrays; import java.util.Scanner; public class App { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.print("Array size: "); int sizeInput = scan.nextInt(); int[] original = new int[sizeInput]; System.out.print("Array itself: "); for (int i = 0; i < sizeInput; i++) { original[i] = scan.nextInt(); } System.out.println("Number to be deleted: "); int dNumber = scan.nextInt(); int[] newArr = new int[original.length]; int index = 0; // 跟踪新数组的有效元素位置 // 遍历原数组所有元素 for (int num : original) { if (num != dNumber) { newArr[index++] = num; } } // 截取有效长度的数组(如果不需要保留原长度的空位,也可以直接输出到index位置) int[] resultArr = Arrays.copyOf(newArr, index); System.out.println(Arrays.toString(resultArr)); scan.close(); } }
代码说明
- 用
index变量记录新数组中有效元素的存储位置,每写入一个有效元素,index自增。 - 遍历原数组所有元素,仅保留不等于目标值的元素。
- 使用
Arrays.copyOf截取有效长度的数组,避免输出多余的默认值0;如果要求最终数组长度不超过原数组但可以保留空位,直接输出newArr到index位置即可。
测试运行示例:
Array size: 5 Array itself: 1 2 3 4 5 Number to be deleted: 2 [1, 3, 4, 5]
内容的提问来源于stack exchange,提问作者PDLIF
相关产品推荐
相关产品推荐

