5-3 jmu-java-m05-使用Comparator接口排序 (10分)
该程序包含 (以下类名请严格按照要求来定义)
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]
这里是检验程序输出
注意:样例输出不包含检验代码输出,提交时请务必添加检验代码。
作者
郑如滨
单位
集美大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
import java.util.*;
import java.lang.reflect.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Person> list =new ArrayList<>();
ArrayList<Teacher> listt = new ArrayList<>();
String[] types = {
"Student","Teacher"};
int seed=sc.nextInt();
Random r = new Random(seed);//输入种子seed,并用其初始化Random对象
int n=sc.