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

如何在嵌套循环中处理数据收集并对嵌套数据进行计算与输出

问题解决思路与代码修改

你的核心问题有两个:一是局部数组存储的分数在循环结束后丢失,无法进行后续操作;二是用String类型存储分数没法做数值计算,同时固定学生数量的写法也不符合需求。下面是修改后的完整代码,以及关键改动说明:

修改后的代码

import java.util.Scanner;
import java.util.ArrayList;

// 封装学生信息的类,统一管理嵌套数据
class Student {
    String name;
    int[] quizScores;
    int midtermScore;
    int finalScore;

    // 构造方法初始化学生信息
    Student(String name, int[] quizScores, int midtermScore, int finalScore) {
        this.name = name;
        this.quizScores = quizScores;
        this.midtermScore = midtermScore;
        this.finalScore = finalScore;
    }

    // 计算总分
    int calculateTotalScore() {
        int total = midtermScore + finalScore;
        for (int score : quizScores) {
            total += score;
        }
        return total;
    }

    // 打印学生所有信息
    void printInfo() {
        System.out.println("学生姓名:" + name);
        System.out.print("测验分数:");
        for (int i = 0; i < quizScores.length; i++) {
            System.out.print(quizScores[i] + (i == quizScores.length - 1 ? "\n" : ", "));
        }
        System.out.println("期中分数:" + midtermScore);
        System.out.println("期末分数:" + finalScore);
        System.out.println("总分:" + calculateTotalScore() + "\n");
    }
}

public class StudentMarks {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        // 获取用户输入的学生数量
        System.out.println("你要输入多少个学生的信息?");
        int studentCount = input.nextInt();
        input.nextLine(); // 读取换行符,避免后续读取名字出错

        // 用ArrayList存储所有学生对象,灵活管理多个学生
        ArrayList<Student> students = new ArrayList<>();

        for (int stNumber = 0; stNumber < studentCount; stNumber++) {
            System.out.println("请输入第" + (stNumber + 1) + "个学生的姓名:");
            String name = input.nextLine();

            // 输入测验分数
            int[] quizScores = new int[2];
            for (int qzNumber = 0; qzNumber < 2; qzNumber++) {
                System.out.println("请输入第" + (qzNumber + 1) + "次测验分数:");
                quizScores[qzNumber] = input.nextInt();
            }

            // 输入期中分数
            System.out.println("请输入期中分数:");
            int midtermScore = input.nextInt();

            // 输入期末分数
            System.out.println("请输入期末分数:");
            int finalScore = input.nextInt();
            input.nextLine(); // 读取换行符,准备下一个学生的姓名输入

            // 创建学生对象并加入集合
            students.add(new Student(name, quizScores, midtermScore, finalScore));
        }
        input.close();

        // 打印所有学生信息及计算结果
        System.out.println("=== 所有学生成绩信息 ===");
        for (Student student : students) {
            student.printInfo();
        }
    }
}

关键改动说明

  • 用类封装嵌套数据:创建Student类把学生的姓名、测验分数、期中/期末分数打包成一个对象,避免局部变量丢失数据,同时让嵌套数据的管理更清晰。
  • 改用数值类型存分数:把分数从String改成int(如果需要小数可以用double),这样直接就能做加减、求和等计算。
  • 动态存储学生:用ArrayList替代固定长度的数组,配合用户输入的学生数量,灵活处理任意数量的学生。
  • 封装计算与打印逻辑:在Student类里写calculateTotalScore和printInfo方法,直接调用就能完成分数计算和信息打印,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:10:40