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

如何将用户输入存储到已有的Java数组中?

如何在Java中向已有数组添加元素并保留原有内容?

嘿,我来帮你搞定这个问题!在Java里,普通数组的长度是固定不变的,一旦初始化就没法直接扩容添加元素,所以我们得换两种思路来实现需求——要么手动创建新数组复制元素,要么用更灵活的集合类。下面给你两种实用方案:

方案一:手动创建新数组(不依赖集合)

既然原数组长度不能改,那我们就创建一个比原数组大1的新数组,把原数组的所有元素复制进去,再把新元素放到新数组的末尾,最后让原数组的引用指向这个新数组就行。

另外先提下你原代码里的两个小错误:

  • int id[] = {"1"}; 是int类型数组,元素不能是字符串"1",得改成int id[] = {1};
  • Int newId = kbd.nextInt(); 里的类型名要小写,应该是int newId

修改后的完整代码如下:

import java.util.Scanner;

public class ArrayAddDemo {
    public static void main(String[] args) {
        String names[] = {"John"};
        int id[] = {1}; // 修正int数组元素类型

        Scanner kbd = new Scanner(System.in);
        System.out.println("Input new name: ");
        String newName = kbd.nextLine();
        
        // 处理names数组:扩容并添加新元素
        String[] updatedNames = new String[names.length + 1];
        // 把原数组元素复制到新数组
        System.arraycopy(names, 0, updatedNames, 0, names.length);
        // 把新元素放到新数组最后一位
        updatedNames[names.length] = newName;
        // 更新原数组引用
        names = updatedNames;

        System.out.println("Input id for " + newName);
        int newId = kbd.nextInt(); // 修正类型名大小写
        
        // 处理id数组:和names数组操作逻辑一致
        int[] updatedIds = new int[id.length + 1];
        System.arraycopy(id, 0, updatedIds, 0, id.length);
        updatedIds[id.length] = newId;
        id = updatedIds;

        // 验证添加结果
        System.out.println("\n当前所有名称:");
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("\n当前所有ID:");
        for (int num : id) {
            System.out.println(num);
        }
    }
}

方案二:使用ArrayList(更推荐,更灵活)

如果之后还需要频繁添加/删除元素,那直接用ArrayList就省心多了——它是动态扩容的集合类,自带add()方法可以直接添加元素,不用手动处理数组复制的繁琐操作。

代码示例:

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

public class ArrayListAddDemo {
    public static void main(String[] args) {
        // 把原数组转换成ArrayList
        ArrayList<String> nameList = new ArrayList<>(Arrays.asList("John"));
        ArrayList<Integer> idList = new ArrayList<>(Arrays.asList(1));

        Scanner kbd = new Scanner(System.in);
        System.out.println("Input new name: ");
        String newName = kbd.nextLine();
        nameList.add(newName); // 直接添加新名称,无需手动扩容

        System.out.println("Input id for " + newName);
        int newId = kbd.nextInt();
        idList.add(newId); // 同理直接添加新ID

        // 如果你之后还是需要普通数组,可以把ArrayList转回去(可选操作)
        String[] names = nameList.toArray(new String[0]);
        Integer[] ids = idList.toArray(new Integer[0]);

        // 验证结果
        System.out.println("\n当前所有名称:");
        for (String name : names) {
            System.out.println(name);
        }
        System.out.println("\n当前所有ID:");
        for (Integer num : ids) {
            System.out.println(num);
        }
    }
}

总结一下

  • 如果只是偶尔添加一次元素,用方案一手动扩容数组完全够用;
  • 如果需要频繁修改数组长度,方案二的ArrayList是更优选择,代码更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:43