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

Java使用循环在数组头部插入元素不丢失末尾元素问题咨询

问题解决思路

错误根源

  • Java中的数组是定长数据结构,你初始化names数组时长度已经固定为5,最多只能存储5个元素,无法直接新增第6个元素
  • 你当前的代码逻辑是将原有元素从后往前依次覆盖移位,最后一位的Theresa会被前一位的值直接覆盖,所以会丢失;如果强行把n改成6,遍历的时候会访问到数组长度以外的下标,直接触发数组越界异常

修复方案(手写数组插入算法)

如果要保留手写算法的实现逻辑,需要先创建一个长度为原数组长度+1的新数组,再完成元素移位和插入操作,代码如下:

import java.util.Scanner;

public class ArraySample1 {
    public static void main(String[] args) {
        String[] names = new String[] {"John", "Cecille", "Mark", "Judas", "Theresa"};
        int n = names.length;

        System.out.println("The original array elements are: ");
        for(int i = 0; i < n; i++){
            System.out.println("NAME[" + i + "] = " + names[i] + " ");
        }
    
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter element to insert: ");
        String item = sc.next();

        // 创建长度+1的新数组
        String[] newNames = new String[n + 1];
        // 新元素放到新数组头部
        newNames[0] = item;
        // 原数组所有元素拷贝到新数组对应位置
        for(int i = 0; i < n; i++){
            newNames[i+1] = names[i];
        }
        // 替换原数组引用
        names = newNames;
        n = names.length;
    
        System.out.println("The array elements after insertion :");
        for(int i = 0; i < n; i++) {
            System.out.println("NAME[" + i + "] = " + names[i] + " ");
        }
    }
}

简化方案(使用Java集合类)

如果不需要手写底层算法,直接使用Java自带的可变长度集合ArrayList实现更简单,不需要手动处理数组扩容逻辑:

import java.util.ArrayList;
import java.util.Scanner;

public class ArraySample2 {
    public static void main(String[] args) {
        ArrayList<String> names = new ArrayList<>();
        names.add("John");
        names.add("Cecille");
        names.add("Mark");
        names.add("Judas");
        names.add("Theresa");

        System.out.println("The original array elements are: ");
        for(int i = 0; i < names.size(); i++){
            System.out.println("NAME[" + i + "] = " + names.get(i) + " ");
        }

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter element to insert: ");
        String item = sc.next();
        // 直接调用方法插入到下标为0的头部位置
        names.add(0, item);

        System.out.println("The array elements after insertion :");
        for(int i = 0; i < names.size(); i++) {
            System.out.println("NAME[" + i + "] = " + names.get(i) + " ");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:18:03