能否用该for循环向ArrayList输入10个姓名?有无更优实现方式?
你的代码无法正常运行,我来帮你修正并提供更好的实现方式
首先得指出你代码里的两个关键错误:
- 类型不匹配问题:你先声明了
ArrayList<String>类型的names,但后面又试图赋值一个Names[10]数组(这里应该是笔误,应该是String[10])——ArrayList和数组是完全不同的类型,不能直接这样赋值。 - ArrayList的
set方法使用错误:set方法是用来替换ArrayList中已存在索引位置的元素,但你的ArrayList初始是空的,调用set(0, ...)会直接抛出IndexOutOfBoundsException异常。
修正后的基础版本
这是能正常运行的代码,用add方法向ArrayList中添加元素:
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<String> names = new ArrayList<>(); System.out.println("Enter 10 names: "); for (int counter = 0; counter < 10; counter++){ // 使用add方法向ArrayList末尾添加新元素 names.add(scan.nextLine()); } // 可选:验证输入结果 System.out.println("\nYou entered these names:"); for (String name : names) { System.out.println(name); } scan.close(); // 记得关闭Scanner资源,避免资源泄漏 } }
更好的实现方式
根据你的需求,有几种更合适的写法:
1. 固定数量输入:用数组更简洁
如果确定就是要输入10个名字,使用数组会比ArrayList更直接,代码也更简洁:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String[] names = new String[10]; System.out.println("Enter 10 names: "); for (int counter = 0; counter < 10; counter++){ names[counter] = scan.nextLine(); } // 验证输出 System.out.println("\nYou entered these names:"); for (String name : names) { System.out.println(name); } scan.close(); } }
2. 灵活数量输入:用while循环适配任意输入量
如果想让程序更灵活(比如允许用户输入任意数量的名字,直到输入"done"结束),可以用while循环实现:
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ArrayList<String> names = new ArrayList<>(); System.out.println("Enter names (type 'done' to finish): "); while (true) { String input = scan.nextLine().trim(); // 输入done时结束循环 if (input.equalsIgnoreCase("done")) { break; } // 过滤空输入,避免添加空字符串 if (!input.isEmpty()) { names.add(input); } } System.out.println("\nYou entered " + names.size() + " names:"); for (String name : names) { System.out.println(name); } scan.close(); } }
内容的提问来源于stack exchange,提问作者brady morgan
相关产品推荐
相关产品推荐

