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

如何在数组指定索引插入元素并保留原索引位置元素?

Java数组插入元素实现原元素后移的修正方案

你的插入方法ins存在两个关键问题,导致元素被覆盖且无法保留原数组的所有元素:

  • 新创建的result数组长度未扩容,和原数组长度一致,插入新元素后必然会挤占末尾元素的空间
  • 第二个循环的遍历范围错误,没有覆盖新数组的所有后续位置,导致原数组后半部分元素未正确后移

修正后的完整代码

import java.util.Arrays;

public class MainArrays {
    public static int[] add(int[] arr, int val) {
        int[] newArray = Arrays.copyOf(arr, arr.length + 1);
        newArray[arr.length] = val;
        return newArray;
    }

    public static int[] del(int[] arr) {
        return Arrays.copyOf(arr, arr.length - 1);
    }

    public static int[] ins(int[] a, int pos, int num) {
        // 新数组长度比原数组多1,预留插入新元素的空间
        int[] result = new int[a.length + 1];
        // 复制插入位置之前的所有元素
        for (int i = 0; i < pos; i++) {
            result[i] = a[i];
        }
        // 将新元素插入目标位置
        result[pos] = num;
        // 复制原数组中插入位置及之后的元素,统一向后偏移一位
        for (int i = pos + 1; i < result.length; i++) {
            result[i] = a[i - 1];
        }
        return result;
    }

    public static void main(String[] args) {
        int[] a = {1, 2, 4};
        System.out.println(Arrays.toString(a));
        a = add(a, 7);
        System.out.println(Arrays.toString(a));
        a = del(a);
        System.out.println(Arrays.toString(a));
        a = ins(a, 2, 3);
        System.out.println(Arrays.toString(a));
    }
}

运行输出

[1, 2, 4]
[1, 2, 4, 7]
[1, 2, 4]
[1, 2, 3, 4]

关键改动说明

  1. 扩容新数组:将result的长度设置为a.length + 1,确保有足够空间容纳新元素,不会丢失原数组的末尾元素
  2. 修正循环范围:第二个循环遍历到result.length,把原数组中从pos开始的所有元素,复制到新数组的pos+1及以后的位置,实现原元素整体后移
  3. 规范代码格式:给循环块加上大括号,避免因缩进问题引发的逻辑错误(原代码第一个循环未加括号,虽当前逻辑没问题,但这是不良编码习惯)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:36:21