pat 1004 乙级题目 成绩排名(20) --java

题目要求:

读入n>0名学生的姓名 , 学号 , 成绩 ,分别输出成绩最高和成绩最低学生的姓名和学号.
在这里插入图片描述

解题思路:

  1. 写一个实体类,重写toString方法;
  2. 使用TreeSet集合实现Comparator接口,重写compare方法使其可以进行排序;
  3. 打印第一个值(调用TreeSet的 first() 方法)和最后一个值(调用TreeSet的 last() 方法);
import java.util.*;
/**
实体:
构造器 + get + set + toString
满分通过
*/
class StudentsDemo {
    private String studentsName;
    private String studentsNumber;
    private int grade;

    public StudentsDemo() {
    }

    public StudentsDemo(String studentsName, String studentsNumber, int grade) {
        this.studentsName = studentsName;
        this.studentsNumber = studentsNumber;
        this.grade = grade;
    }

    public String getStudentsName() {
        return studentsName;
    }

    public void setStudentsName(String studentsName) {
        this.studentsName = studentsName;
    }

    public String getStudentsNumber() {
        return studentsNumber;
    }

    public void setStudentsNumber(String studentsNumber) {
        this.studentsNumber = studentsNumber;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
/**
重写toString方法
*/
    @Override
    public String toString() {
        return studentsName + ' ' + studentsNumber;
    }
}

public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String num = scanner.nextLine();
        Integer integer = Integer.valueOf(num);//输入需要比较的个数
        TreeSet<StudentsDemo> studentsDemos = new TreeSet<>(new Comparator<StudentsDemo>() {
            @Override
            public int compare(StudentsDemo o1, StudentsDemo o2) {
                //按成绩降序
                int result = o2.getGrade() - o1.getGrade();
                //当成绩相同时按照名字进行排序
                if (result==0) return o1.getStudentsName().charAt(0) - o2.getStudentsName().charAt(0);
                else return result;
            }
        });
        for (int i = 0; i < integer; i++) {
            String student = scanner.nextLine();  //输入测试样例
            String[] splitStudent = student.split(" ");  //对样例分割
            String s0 = splitStudent[0];  //学生姓名
            String s1 = splitStudent[1];   //学生学号
            int s2 = Integer.valueOf(splitStudent[2]);  //学生成绩
            if (s0.length()>10||s1.length()>10||s2>100||s2<0)break;  //要求姓名,学号长度不超过10 , 成绩不能小于0,大于100
            StudentsDemo studentsDemo = new StudentsDemo(s0,s1,s2); //将合格的值放入类中
            studentsDemos.add(studentsDemo);  //放入集合中
        }
        scanner.close();
        System.out.println(studentsDemos.first());//输出treeSet集合的第一个值,first方法
        System.out.println(studentsDemos.last());//输出treeSet集合的最后一个值,last方法
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值