如何在嵌套循环中处理数据收集并对嵌套数据进行计算与输出
问题解决思路与代码修改
你的核心问题有两个:一是局部数组存储的分数在循环结束后丢失,无法进行后续操作;二是用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
相关产品推荐
相关产品推荐

