Java学生成绩读取与排序实战指南:从输入到排序输出

本文将为您提供一个完整的Java程序,用于读取多行学生成绩信息,计算平均成绩,并按降序排列学生。

1. 功能描述

本程序从键盘读取多行学生成绩信息,每行信息包含学号、姓名、课程名和成绩。程序将读取这些信息,计算每个学生的平均成绩,并按平均成绩降序排列学生。

2. 代码实现javaimport java.util.*;

// 定义学生类class Student { String id; String name; List scores;

// 构造函数    public Student(String id, String name) {        this.id = id;        this.name = name;        this.scores = new ArrayList<>();    }

// 添加成绩    public void addScore(int score) {        scores.add(score);    }

// 计算平均成绩    public int getAverageScore() {        int sum = 0;        for (int score : scores) {            sum += score;        }        return sum / scores.size();    }}

// 主程序入口public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List stuList = new ArrayList<>();

    // 读取学生成绩信息        while (true) {            String input = scanner.nextLine();            if (input.equals('exit')) {                break;            }

        String[] data = input.split(',');            String id = data[1];            String name = data[0];            int score = Integer.parseInt(data[3]);

        boolean studentExists = false;            // 查找学生是否存在            for (Student student : stuList) {                if (student.id.equals(id)) {                    student.addScore(score);                    studentExists = true;                    break;                }            }            // 如果学生不存在,则创建新的学生对象            if (!studentExists) {                Student newStudent = new Student(id, name);                newStudent.addScore(score);                stuList.add(newStudent);            }        }

    // 按平均成绩降序排列学生        Collections.sort(stuList, new Comparator<Student>() {            @Override            public int compare(Student s1, Student s2) {                int avgScore1 = s1.getAverageScore();                int avgScore2 = s2.getAverageScore();                if (avgScore1 == avgScore2) {                    return s1.id.compareTo(s2.id);                } else {                    return Integer.compare(avgScore2, avgScore1);                }            }        });

    // 输出排序后的学生信息        for (int i = 0; i < stuList.size(); i++) {            String rank = 'No' + (i + 1) + ':';            System.out.println(rank + stuList.get(i).id + ',' + stuList.get(i).name);        }    }}

3. 代码解析

  • 首先,我们定义了一个Student类,用于存储学生的学号、姓名和成绩信息。- 在Main类的main方法中,我们使用Scanner类从键盘读取学生成绩信息。- 对于每行信息,我们将其分割成学号、姓名、课程名和成绩。- 然后,我们检查该学生是否已经存在于stuList中。如果存在,则将该成绩添加到该学生的成绩列表中;否则,创建一个新的Student对象,并将其添加到stuList中。- 最后,我们使用Collections.sort方法和一个自定义的Comparator对stuList进行排序,排序规则为平均成绩降序,平均成绩相同则按学号升序。- 最后,我们遍历排序后的stuList,并输出每个学生的排名、学号和姓名。

4. 总结

本文提供了一个完整的Java程序,用于读取学生成绩信息、计算平均成绩并按降序排列学生。代码中包含详细的注释,方便读者理解。读者可以根据自己的需要修改代码,以实现更复杂的功能。

Java学生成绩读取排序算法实现与代码示例

原文地址: https://www.cveoy.top/t/topic/b4eW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录