Set集合_成绩排序

通过创建学生类,使用TreeSet集合存储学生对象并结合自定义比较器,按总分从高到低对3个学生的语文、数学、英语成绩进行排序。程序详细步骤包括创建学生类、录入学生信息、创建比较器、添加到集合并遍历输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:
键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出。
分析:
① 创建学生类(姓名,语文成绩,数学成绩,英语成绩,总分)
② 创建TreeSet集合,用来存储学生对象
③ 录入学生信息
④ 创建学生对象的比较器
⑤ 把学生对象添加到TreeSet集合中
⑥ 遍历集合

/**
*学生信息类
*/
public class Student2{
    private String name;
    private int chinese;
    private int maths;
    private int english;
    private int sum;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", chinese=" + chinese +
                ", maths=" + maths +
                ", english=" + english +
                ", sum=" + sum +
                '}';
    }

    public Student2() {
    }

    public Student2(String name, int chinese, int maths, int english, int sum) {
        this.name = name;
        this.chinese = chinese;
        this.maths = maths;
        this.english = english;
        this.sum = sum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMaths() {
        return maths;
    }

    public void setMaths(int maths) {
        this.maths = maths;
    }

    public int getEnglish() {
        return english;
    }

    public void setEnglish(int english) {
        this.english = english;
    }

    public int getSum() {
        return sum;
    }

    public void setSum(int sum) {
        this.sum = sum;
    }


}
/**
*测试类
*/
public class StudentTest2 {
    public static void main(String[] args) {
        //创建一个TreeSet集合
        Set<Student2> set=new TreeSet<Student2>(new Comparator<Student2>() {
            @Override
            public int compare(Student2 o1, Student2 o2) {
                //总分从高到低排序
                int num=o2.getSum()-o1.getSum();
                //保证可以出现总分相同但是语文成绩不同的学生
                int num2=num==0 ? o1.getChinese()-o2.getChinese():num;
                //保证可以出现总分相同但是数学成绩不同的学生
                int num3=num2==0 ? o1.getMaths()-o2.getMaths():num2;
                //保证可以出现总分相同但是英语成绩不同的学生
                int num4=num3==0 ? o1.getEnglish()-o2.getEnglish():num3;
                //保证可以出现总分相同但是姓名不同的学生
                int num5=num4==0 ? o1.getName().compareTo(o2.getName()):num4;
                return num5;
            }
        });
        System.out.println("学生信息开始录入......");
        //键盘输入3个学生信息
        for (int i=0;i<3;i++){
            Scanner sc=new Scanner(System.in);
            System.out.println("请输入学生姓名:");
            String name=sc.next();
            System.out.println("请输入语文成绩:");
            int chinese=sc.nextInt();
            System.out.println("请输入数学成绩:");
            int maths=sc.nextInt();
            System.out.println("请输入英语成绩:");
            int english=sc.nextInt();
            int sum=chinese+maths+english;
            set.add(new Student2(name,chinese,maths,english,sum));
        }
        System.out.println("学生信息录入完毕");
        System.out.println("学习信息从高到低排序如下:");
        System.out.println("姓名\t总分成绩");
        for(Student2 s:set){
            System.out.println(s.getName() + "\t" + s.getSum());

        }
    }

}

执行结果:

学生信息开始录入......
请输入学生姓名:
张三
请输入语文成绩:
62
请输入数学成绩:
64
请输入英语成绩:
63
请输入学生姓名:
李四
请输入语文成绩:
45
请输入数学成绩:
46
请输入英语成绩:
48
请输入学生姓名:
王五
请输入语文成绩:
77
请输入数学成绩:
74
请输入英语成绩:
56
学生信息录入完毕
学习信息从高到低排序如下:
姓名	总分成绩
王五	207
张三	189
李四	139
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值