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

Java学生信息录入问题:重复录入无法存储多组数据

问题分析与修复方案

核心问题点

  • 数据覆盖:每次录入时row都被重置为0,新输入的学生信息直接覆盖之前的记录,根本存不了多组数据。
  • 循环混乱:嵌套的while(in.hasNext())完全多余,控制台输入场景下这个循环会一直阻塞,导致流程卡死。
  • switch逻辑错误:case "yes"后没加break,执行完yes的代码会直接跳到case "no",把yn设为false,直接终止循环,没法继续录入。
  • 打印不完整:只打印了第0行的数据,没有遍历所有已录入的学生。
  • 冗余代码:final String toUpperCase;未初始化且无实际用途,属于无效代码。

修复后的完整代码

import java.util.Scanner;

public class test3d {
    public static void main(String[] args) {
        // 定义二维数组存储学生信息,每行存1个学生的4项数据
        String[][] students = new String[50][4]; 
        Scanner in = new Scanner(System.in);
        String decision = "";
        boolean yn = true;
        // 用row变量跟踪当前录入的学生行号,初始从0开始,每录完一个加1
        int row = 0;

        // 主循环:控制是否继续录入
        while (yn) {
            System.out.println("Enter Student ID Number: ");
            students[row][0] = in.nextLine();
            
            System.out.println("Enter Student Fullname: ");
            students[row][1] = in.nextLine();
            
            System.out.println("Enter Student College: ");
            students[row][2] = in.nextLine();
            
            System.out.println("Enter Student Program: ");
            students[row][3] = in.nextLine();
            
            System.out.println("Record Successfully Saved");
            System.out.print("Do you want to add more? YES/NO ");
            decision = in.nextLine().toLowerCase(); // 转小写避免大小写判断问题

            switch (decision) {
                case "yes":
                    row++; // 行号加1,准备存下一个学生
                    break; // 必须加break,避免执行后续case
                case "no":
                    yn = false;
                    break;
                default:
                    System.out.println("输入无效,请输入YES或NO");
                    // 输入错误时不换行号,重新询问
                    continue;
            }
        }

        // 打印所有学生信息
        System.out.println("\nID NUMBER     STUDENT NAME      COLLEGE      PROGRAM ");
        // 遍历所有已录入的学生行(从0到row)
        for (int i = 0; i <= row; i++) {
            System.out.printf("%-13s %-18s %-12s %s%n", 
                students[i][0], 
                students[i][1].toUpperCase(), 
                students[i][2].toUpperCase(), 
                students[i][3].toUpperCase());
        }
    }
}

关键修复说明

  1. 行号跟踪:把row变量移到主循环外面,每次录入完一个学生后row++,确保新数据存在下一行,不会覆盖旧数据。
  2. 移除多余循环:删掉嵌套的while(in.hasNext()),主循环用yn变量控制即可,避免流程阻塞。
  3. switch修正:给case "yes"加上break,防止逻辑串到case "no";同时把输入转成小写,兼容用户输入Yes、YES等不同大小写的情况。
  4. 完整打印:用for循环遍历所有已录入的学生行,用printf格式化输出,让排版更整齐。
  5. 添加默认分支:处理用户输入无效的情况,提示后重新询问,避免程序异常。

内容的提问来源于stack exchange,提问作者Jericho Faustino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:42:32