javaSE进阶练习——TreeSet集合,自定义类重写compareTo练习

需求:用TreeSet集合存储3个学生信息,学生信息包括姓名、年龄、语文成绩、数学成绩、和总分,要求按总分从高到低排序,若总分一样按语文排序,如果语文一样按数学排序,如果数学一样按年龄排序,如果年龄一样按姓名默认排序。

详细代码如下:

Student类(重写toString方法和compareTo方法)

public class Student implements Comparable<Student> {
    //    姓名、年龄、语文成绩、数学成绩、和总分
    private String name;
    private int age;
    private double chinese;
    private double math;
    private double sum;

    //构造方法
    public Student() {
    }

    public Student(String name, int age, double chinese, double math, double sum) {
        this.name = name;
        this.age = age;
        this.chinese = chinese;
        this.math = math;
        this.sum = sum;
    }
//    set/get

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getChinese() {
        return chinese;
    }

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

    public double getMath() {
        return math;
    }

    public void setMath(double math) {
        this.math = math;
    }

    public double getSum() {
        return sum;
    }

    public void setSum(double sum) {
        this.sum = sum;
    }
//    重写tostring()和compareTo()

    @Override
    public String toString() {
        return "Student{" +
                "姓名='" + name + '\'' +
                ", 年龄=" + age +
                ", 语文=" + chinese +
                ", 数学=" + math +
                ", 总分=" + sum +
                '}';
    }


    @Override
    public int compareTo(Student o) {
/*要求按总分从高到低排序,如果总分一样则按语文成绩从高到低排序,如果语文一样再按数学,如果数学一样,
 再按年龄从低到高排序,如果年龄一样再按姓名排序*/

        double sum=o.sum-this.sum;//大于0,新元素存右边,小于0存左边,总分从高到低规则
        double result=sum==0?(o.chinese-this.chinese):sum;//判断总分是否相等,总分相等则rusult=o.chinese-this.chinese按语文排,不相等则rusult=o.sum-this.sum,按总分排
            result=result==0?(o.math-this.math):result;//总分相等后,按语文排,再判断语文是否相等,语文相等则rusult=o.math-this.math按数学排,语文不相等则按语文排
            result=result==0?(this.age-o.age):result;//总分相等,语文相等,按数学排,再判断数学是否相等,数学相等则rusult=this.age-o.age按年龄排,数学不相等则按数学排
            result=result==0?(this.name.compareTo(o.name)):result;//总分相等,语文相等,数学相等,按年龄排,再判断年龄是否相等,年龄相等则this.name.compareTo(o.name)按默认姓名排,年龄不相等则按年龄排
        return (int) result;
    }
}

测试类:

public class TreeSetTest {
    public static void main(String[] args) {
//        需求:用treeset集合存储3个学生信息,学生信息包括姓名、年龄、语文成绩、数学成绩、
//        和总分,要求按总分从高到低排序,如果总分一样则按语文成绩从高到低排序,如果语文
//        一样再按数学,如果数学一样,再按年龄从低到高排序,如果年龄一样再按姓名排序
//        1.手动录入3个学生信息,创建学生对象,并存储进TreeSet集合
//        创建集合
        Scanner sc=new Scanner(System.in);
        TreeSet ts=new TreeSet();//使用自定义类方式进行排序
        for(int i=0;i<3;i++)
        {
        System.out.println("输入学生姓名");
        String name=sc.next();
        System.out.println("输入学生年龄");
        int age=sc.nextInt();
        System.out.println("输入学生语文成绩");
        double chinese=sc.nextDouble();
        System.out.println("输入学生数学成绩");
        double math=sc.nextDouble();
        double sum=math+chinese;
        Student s1=new Student(name,age,chinese,math,sum);
        ts.add(s1);
        }
//        输出
        System.out.println(ts);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值