Java中如何用拼接字符串定义变量?循环存储输入方案咨询
可行实现方案及优化建议
Java是静态类型语言,编译阶段就确定了所有变量的名称,你想用字符串拼接出的动态名字当变量名,这在Java里根本行不通——编译器根本不认这种“临时凑出来”的变量名。下面给你几种靠谱的实现方式:
1. 使用数组存储
如果你的学生序号是连续的数字,用数组是最直接高效的方式:
import java.util.Scanner; public class StudentDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int studentCount = 3; // 假设要存储3个学生的姓名 String[] studentNames = new String[studentCount]; for (int i = 0; i < studentCount; i++) { System.out.print("请输入第" + (i+1) + "个学生的姓名:"); studentNames[i] = scanner.nextLine(); } // 验证存储结果 for (int i = 0; i < studentCount; i++) { System.out.println("student" + (i+1) + "Name: " + studentNames[i]); } scanner.close(); } }
数组通过索引直接访问,性能高、内存开销小,适合序号连续的场景。
2. 使用HashMap存储
如果需要严格对应student1Name这类字符串作为标识,HashMap可以满足需求:
import java.util.HashMap; import java.util.Scanner; public class StudentDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int studentCount = 3; HashMap<String, String> studentMap = new HashMap<>(); for (int i = 0; i < studentCount; i++) { String key = "student" + (i+1) + "Name"; System.out.print("请输入" + key + ":"); studentMap.put(key, scanner.nextLine()); } // 验证存储结果 System.out.println(studentMap.get("student1Name")); System.out.println(studentMap.get("student2Name")); scanner.close(); } }
这种方式可以灵活定义键名,哪怕以后键的规则变了也容易调整,但访问速度略低于数组。
3. 面向对象封装(推荐优化方案)
如果你的学生信息不止姓名,或者以后可能扩展其他属性(比如年龄、学号),直接封装成Student类是更专业的做法:
import java.util.ArrayList; import java.util.List; import java.util.Scanner; class Student { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } // 可按需添加getter/setter方法 public String getName() { return name; } public int getId() { return id; } } public class StudentDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int studentCount = 3; List<Student> students = new ArrayList<>(); for (int i = 0; i < studentCount; i++) { System.out.print("请输入第" + (i+1) + "个学生的姓名:"); String name = scanner.nextLine(); students.add(new Student(i+1, name)); } // 验证存储结果 for (Student student : students) { System.out.println("student" + student.getId() + "Name: " + student.getName()); } scanner.close(); } }
这种方式符合面向对象的设计思想,代码可读性、扩展性更强,后续添加新属性或方法都很方便。
内容的提问来源于stack exchange,提问作者JMonster18
相关产品推荐
相关产品推荐

