7-3 jmu-java-m05-使用Comparator接口排序

该程序包含 (以下类名请严格按照要求来定义)

Person类:

属性:int id, String name, String birthDate。注意:定义时需按照顺序从上到下定义。

方法:构造方法(id, name, birthDate), id与birthDate的getter方法, name的getter/setter方法,Eclipse自动生成的tostring。

Student类继承自Person:

属性:int enrollmentYear, String clazzName。

方法:构造方法(id, name, birthdate, enrollmentYear, clazzName),建议使用super复用Person的构造函数。toString方法(包含两行,第一行为父类的toString方法,第二行为Student类自身属性的toString方法,具体格式见输出样例)

Teacher类继承自Person:

属性:String department, double salary。

方法: 构造方法(id, name, brithdate, department, salary),建议使用super复用Person的构造函数。toString方法(包含两行,第一行为父类的toString方法,第二行为Teacher类自身属性的toString方法,具体格式见输出样例)salary的getter方法,

PerComparatorDES类继承Comparator接口:

方法:compare方法:先比较name,按降序进行排序,如果name值一样,则按id降序进行排序。

PerComparatorAES类继承Comparator接口:

方法:compare方法:先比较name,按升序进行排序,如果name值一样,则按id升序进行排序。

TeaComparator类继承Comparator接口:

方法:compare方法:比较salary,并按其降序进行排序。

检验程序如下,请务必粘贴至main函数末尾进行检测(需要导入import java.lang.reflect.*;包)

Class interfaces1[] = PerComparatorDES.class.getInterfaces();
Class interfaces2[] = PerComparatorAES.class.getInterfaces();
Class interfaces3[] = TeaComparator.class.getInterfaces();
for(Class inf:interfaces1) {
    System.out.println(inf);
}
for(Class inf:interfaces2) {
    System.out.println(inf);
}
for(Class inf:interfaces3) {
    System.out.println(inf);
}

**main方法: **

public static void main(String[] args) {

    String[] types = {"Student","Teacher"};
        //输入种子seed,并用其初始化Random对象
        //输入对象生成数量n
        //以下是生成n个对象的循环
            //使用random.nextInt(2)从types数组中随机选取元素x并输出
            //根据x选择输入相应的参数
        //输出person集合进行降序排序并输出提示信息
        //输出排序后集合的toString
        //输出person集合进行升序排序并输出提示信息
        //输出排序后集合的toString
        //输出teacher集合进行salary降序排序并输出提示信息
        //输出排序后集合的toString
        //请在此粘贴上检验程序代码
 }

输入格式:

随机数种子seed

产生对象数量n

n行,每行是每个对象的信息信息。

如果要生成Student对象则依次输入:姓名 出生日期 入学年份 班级

如果要生成Teacher对象则依次输入:姓名 出生日期 系 薪水

注意:每个对象的id为每次循环的序数,依次从0到n-1

输出格式:

n个对象的类型

Person集合降序排序后的提示信息

排序后n个对象的toString

Person集合升序排序后的提示信息

排序后n个对象的toString

Teacher集合salary降序排序后的提示信息

排序后集合的toString

输入样例:

3
6
Liz 1986-10-10 CS 2000
Tom 1978-05-07 CS 2500.5
Sally 2000-01-03 2018 Net01
Tom 1988-06-07 Mechanical 1990
Sally 2001-02-05 2019 Software02
Li 1978-05-07 cs 2400

输出样例:

Teacher
Teacher
Student
Teacher
Student
Teacher
afterSortDES:
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=4, name=Sally, birthDate=2001-02-05]
Student [enrollmentYear=2019, clazzName=Software02]
Person [id=2, name=Sally, birthDate=2000-01-03]
Student [enrollmentYear=2018, clazzName=Net01]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
afterSortAES:
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=2, name=Sally, birthDate=2000-01-03]
Student [enrollmentYear=2018, clazzName=Net01]
Person [id=4, name=Sally, birthDate=2001-02-05]
Student [enrollmentYear=2019, clazzName=Software02]
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
afterSortTeacher:
Person [id=1, name=Tom, birthDate=1978-05-07]
Teacher [department=CS, salary=2500.5]
Person [id=5, name=Li, birthDate=1978-05-07]
Teacher [department=cs, salary=2400.0]
Person [id=0, name=Liz, birthDate=1986-10-10]
Teacher [department=CS, salary=2000.0]
Person [id=3, name=Tom, birthDate=1988-06-07]
Teacher [department=Mechanical, salary=1990.0]
这里是检验程序输出

注意:样例输出不包含检验代码输出,提交时请务必添加检验代码。

 代码实现区:

import java.util.*;
import java.lang.reflect.*;

class Person {
    int id;
    String name;
    String birthDate;

    public Person(int id, String name, String birthDate) {
        this.id = id;
        this.name = name;
        this.birthDate = birthDate;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

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

    public String getBirthDate() {
        return birthDate;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", birthDate=" + birthDate + "]";
    }
}

class Student extends Person {
    int enrollmentYear;
    String clazzName;

    public Student(int id, String name, String birthDate, int enrollmentYear, String clazzName) {
        super(id, name, birthDate);
        this.enrollmentYear = enrollmentYear;
        this.clazzName = clazzName;
    }

    @Override
    public String toString() {
        return super.toString() + "\nStudent [enrollmentYear=" + enrollmentYear + ", clazzName=" + clazzName + "]";
    }
}

class Teacher extends Person {
    String department;
    double salary;

    public Teacher(int id, String name, String birthDate, String department, double salary) {
        super(id, name, birthDate);
        this.department = department;
        this.salary = salary;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public String toString() {
        return super.toString() + "\nTeacher [department=" + department + ", salary=" + salary + "]";
    }
}

class PerComparatorDES implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        int nameCompare = p2.getName().compareTo(p1.getName());
        if (nameCompare != 0) {
            return nameCompare;
        } else {
            return p2.getId() - p1.getId();
        }
    }
}

class PerComparatorAES implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        int nameCompare = p1.getName().compareTo(p2.getName());
        if (nameCompare != 0) {
            return nameCompare;
        } else {
            return p1.getId() - p2.getId();
        }
    }
}

class TeaComparator implements Comparator<Teacher> {
    @Override
    public int compare(Teacher t1, Teacher t2) {
        return Double.compare(t2.getSalary(), t1.getSalary());
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random random = new Random();

        // 输入种子seed,并用其初始化Random对象
        int seed = sc.nextInt();
        random.setSeed(seed);

        // 输入对象生成数量n
        int n = sc.nextInt();
        sc.nextLine(); // 消费掉换行符

        List<Person> personList = new ArrayList<>();
        List<Teacher> teacherList = new ArrayList<>();

        // 生成n个对象的循环
        for (int i = 0; i < n; i++) {
            // 使用random.nextInt(2)从types数组中随机选取元素x并输出
            String[] types = {"Student", "Teacher"};
            String x = types[random.nextInt(2)];
            System.out.println(x);

            // 根据x选择输入相应的参数
            if (x.equals("Student")) {
                String name = sc.next();
                String birthDate = sc.next();
                int enrollmentYear = sc.nextInt();
                String clazzName = sc.next();
                Student student = new Student(i, name, birthDate, enrollmentYear, clazzName);
                personList.add(student);
            } else {
                String name = sc.next();
                String birthDate = sc.next();
                String department = sc.next();
                double salary = sc.nextDouble();
                sc.nextLine(); // 消费掉换行符
                Teacher teacher = new Teacher(i, name, birthDate, department, salary);
                personList.add(teacher);
                teacherList.add(teacher);
            }
        }

        // 输出person集合进行降序排序并输出提示信息
        System.out.println("afterSortDES:");
        Collections.sort(personList, new PerComparatorDES());
        for (Person p : personList) {
            System.out.println(p);
        }

        // 输出person集合进行升序排序并输出提示信息
        System.out.println("afterSortAES:");
        Collections.sort(personList, new PerComparatorAES());
        for (Person p : personList) {
            System.out.println(p);
        }

        // 输出teacher集合进行salary降序排序并输出提示信息
        System.out.println("afterSortTeacher:");
        Collections.sort(teacherList, new TeaComparator());
        for (Teacher t : teacherList) {
            System.out.println(t);
        }

        // 检验程序代码
        Class interfaces1[] = PerComparatorDES.class.getInterfaces();
        Class interfaces2[] = PerComparatorAES.class.getInterfaces();
        Class interfaces3[] = TeaComparator.class.getInterfaces();
        for (Class inf : interfaces1) {
            System.out.println(inf);
        }
        for (Class inf : interfaces2) {
            System.out.println(inf);
        }
        for (Class inf : interfaces3) {
            System.out.println(inf);
        }

        sc.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值