如何在数组指定索引插入元素并保留原索引位置元素?
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]
关键改动说明
- 扩容新数组:将
result的长度设置为a.length + 1,确保有足够空间容纳新元素,不会丢失原数组的末尾元素 - 修正循环范围:第二个循环遍历到
result.length,把原数组中从pos开始的所有元素,复制到新数组的pos+1及以后的位置,实现原元素整体后移 - 规范代码格式:给循环块加上大括号,避免因缩进问题引发的逻辑错误(原代码第一个循环未加括号,虽当前逻辑没问题,但这是不良编码习惯)
内容的提问来源于stack exchange,提问作者minecraft god
相关产品推荐
相关产品推荐

