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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:50:33