Java中如何用Scanner获取输入存入数组?附代码正确性校验需求
代码问题诊断与修正方案
原代码存在的错误
- 类型不匹配错误:
student_id = studentId;行尝试将单个String类型的学生ID直接赋值给String[]数组类型变量,语法非法,无法通过编译。 - 逻辑不符合需求:后续遍历整个150长度数组的for循环,会强制要求用户一次性输入150个ID,和你「方法反复调用、每次存储一个用户输入ID」的需求完全不符,且每次调用都会清空覆盖之前存储的所有ID。
- 持久化存储缺失:数组和存储位置标记定义在方法内部,每次调用方法都会重新初始化数组,之前存储的所有ID会被全部清空,无法实现累计存储的效果。
修正方案
方案1:沿用固定长度数组实现(最多存150个ID)
把数组和当前存储下标提取为类成员变量,每次调用方法仅存储1个新输入的ID,代码示例:
import java.util.Scanner; public class StudentIdStore { // 类成员变量,多次调用方法不会重置 private static final int MAX_STUDENT = 150; private String[] studentIdArray = new String[MAX_STUDENT]; // 记录当前已经存储的元素个数 private int currentIndex = 0; private Scanner input = new Scanner(System.in); // 反复调用的存储方法 public void saveStudentId() { // 先判断数组是否已满 if (currentIndex >= MAX_STUDENT) { System.out.println("存储失败,最多仅支持存储150个学生ID"); return; } System.out.print("Enter Student ID : "); String studentId = input.nextLine(); // 存入数组对应位置 studentIdArray[currentIndex] = studentId; // 下标自增,下次存入下一个位置 currentIndex++; } }
方案2:更推荐的动态ArrayList实现(无固定长度限制)
数组是固定长度的,达到上限后无法继续存储,使用ArrayList可以自动扩容,无需提前指定长度,实现更灵活:
import java.util.ArrayList; import java.util.Scanner; public class StudentIdStore { // 动态存储列表,无需指定上限 private ArrayList<String> studentIdList = new ArrayList<>(); private Scanner input = new Scanner(System.in); public void saveStudentId() { System.out.print("Enter Student ID : "); String studentId = input.nextLine(); // 直接追加到列表末尾 studentIdList.add(studentId); } }
内容的提问来源于stack exchange,提问作者sha sha
相关产品推荐
相关产品推荐

