如何将用户输入存储到已有的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
相关产品推荐
相关产品推荐

