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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03