定义Person抽象类,Student类、Company类,Employee类。
Person类的属性:String name, int age, boolean gender
Person类的方法:
public Person(String name, int age, boolean gender);
public String toString(); //返回"name-age-gender"格式的字符串
public boolean equals(Object obj);//比较name、age、gender,都相同返回true,否则返回false
Student类继承自Person,属性:String stuNo, String clazz
Student类的方法:
//建议使用super复用Person类的相关有参构造函数
public Student(String name, int age, boolean gender, String stuNo, String clazz);
public String toString(); //返回 “Student:person的toString-stuNo-clazz”格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true,则继续比较stuNo与clazz。
Company类属性:String name
Company类方法:
public Company(String name);
public String toString(); //直接返回name
public boolean equals(Object obj);//name相同返回true
Employee类继承自Person,属性:Company company, double salary
Employee类方法:
//建议使用super复用Person类的相关有参构造函数
public Employee(String name, int age, boolean gender, double salary, Company company);
public String toString(); //返回"Employee:person的toString-company-salary"格式的字符串
public boolean equals(Object obj);//首先调用父类的equals方法,如果返回true。再比较company与salary。
//比较salary属性时,使用DecimalFormat df = new DecimalFormat("#.#");保留1位小数
编写equals方法重要说明:
对Employee的company属性的比较。要考虑传入为null的情况。如果company不为null且传入为null,返回false
对所有String字符类型比较时,也要考虑null情况。
提示
排序可使用Collections.sort
equals方法要考虑周全
创建若干Student对象、Employee对象。
输入s,然后依次输入name age gender stuNo clazz创建Student对象。
输入e,然后依次输入name age gender salary company创建Employee对象。
然后将创建好的对象放入List personList。输入其他字符,则结束创建。
创建说明:对于String类型,如果为null则不创建对象,而赋值为null。对于company属性,如果为null则赋值为null,否则创建相应的Company对象。
对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable或Comparator
接受输入,如果输入为exit则return退出程序,否则继续下面步骤。
将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。
输出字符串stuList,然后输出stuList中的每个对象。
输出字符串empList,然后输出empList中的每个对象。
1-3为一个测试点 4-6为一个测试点
输入样例:
s zhang 23 false 001 net15
e wang 18 true 3000.51 IBM
s zhang 23 false 001 net15
e bo 25 true 5000.51 IBM
e bo 25 true 5000.52 IBM
e bo 18 true 5000.54 IBM
e tan 25 true 5000.56 IBM
e tan 25 true 5000.51 IBM
s wang 17 false 002 null
s wang 17 false 002 null
e hua 16 false 1000 null
s wang 17 false 002 net16
e hua 16 false 1000 null
e hua 18 false 1234 MicroSoft
!
continue
为方便测试用例,以下代码用于自动创建对象:
//测试数据创建
String[] perInfo= {//测试数据
"s zhang 23 false 001 net15" ,
"e wang 18 true 3000.51 IBM" ,
"s zhang 23 false 001 net15" ,
"e bo 25 true 5000.51 IBM" ,
"e bo 25 true 5000.52 IBM" ,
"e bo 18 true 5000.54 IBM" ,
"e tan 25 true 5000.56 IBM" ,
"e tan 25 true 5000.51 IBM" ,
"s wang 17 false 002 null" ,
"s wang 17 false 002 null" ,
"e hua 16 false 1000 null" ,
"s wang 17 false 002 net16" ,
"e hua 16 false 1000 null" ,
"e hua 18 false 1234 MicroSoft"
};
for(int i=0;i<perInfo.length;i++) {//数据创建
String info[] = perInfo[i].split(" ");
if(info[0].equals("s")) {
Student s = new Student(info[1],
Integer.parseInt(info[2]),
Boolean.parseBoolean(info[3]),
info[4],
info[5]);
personList.add(s);
}
if(info[0].equals("e")) {
Employee e = new Employee(info[1],
Integer.parseInt(info[2]),
Boolean.parseBoolean(info[3]),
Double.parseDouble(info[4]),
new Company(info[5]));
personList.add(e);
}
}
输出样例:
Employee:bo-18-true-IBM-5000.54 Employee:bo-25-true-IBM-5000.51
Employee:bo-25-true-IBM-5000.52 Employee:hua-16-false-null-1000.0
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56 Employee:tan-25-true-IBM-5000.51
Student:wang-17-false-002-null Student:wang-17-false-002-null
Student:wang-17-false-002-net16 Employee:wang-18-true-IBM-3000.51
Student:zhang-23-false-001-net15 Student:zhang-23-false-001-net15
stuList Student:wang-17-false-002-null Student:wang-17-false-002-net16
Student:zhang-23-false-001-net15 empList
Employee:bo-18-true-IBM-5000.54 Employee:bo-25-true-IBM-5000.51
Employee:hua-16-false-null-1000.0
Employee:hua-18-false-MicroSoft-1234.0
Employee:tan-25-true-IBM-5000.56 Employee:tan-25-true-IBM-5000.51
Employee:wang-18-true-IBM-3000.51
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
import java.text.DecimalFormat;
abstract class Person {// 抽象类
public String name;
public int age;
public boolean gender;
public Person(String name,int age,boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String toString() {
return this.name+"-"+this.age+"-"+this.gender;
}
public boolean equals(Person obj) {
if(obj==null) return false;
return obj.name.equals(this.name)&&
obj.age==this.age&&
obj.gender==this.gender;
}
}
class Company{
public String name;
public Company(String name) {
this.name = name;
}
public String toString() {
return this.name;
}
public boolean equals(Company obj) {
if(obj==null) return false;
return obj.name.equals(this.name);
}
}
class Employee extends Person{
public Company company;
private double salary;
public Employee(String name, int age, boolean gender,double salary,Company company) {
super(name, age, gender);
this.salary = salary;
this.company = new Company(company.name);
}
public String toString() {
return "Employee:"+super.toString()+"-"+this.company.toString()+"-"+this.salary;
}
public boolean equals(Employee obj) {
DecimalFormat df = new DecimalFormat("#.#");//保留一位小数
if(super.equals(obj)) {
return df.format(obj.salary).equals(df.format(this.salary))&&
this.company.equals(obj.company);
}else return false;
}
}
class Student extends Person{
private String stuNo;
private String clazz;
public Student(String name, int age, boolean gender,String stuNo,String clazz) {
super(name, age, gender);
this.clazz = clazz;
this.stuNo = stuNo;
}
public String toString() {
return "Student:"+super.toString()+"-"+this.stuNo+"-"+this.clazz;
}
public boolean equals(Student obj) {
if(super.equals(obj)) {
return this.stuNo.equals(obj.stuNo)&&
this.clazz.equals(obj.clazz);
}else return false;
}
}
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<Person>() ;
List<Student> stuList = new ArrayList<Student>();
List<Employee> empList = new ArrayList<Employee>() ;
Scanner sc = new Scanner(System.in);
//输入数据
while(true) {
String perInfo = sc.nextLine();
String info[] = perInfo.split(" ");
if(info[0].equals("s")) {
Student s = new Student(info[1],
Integer.parseInt(info[2]),
Boolean.parseBoolean(info[3]),
info[4],
info[5]);
personList.add(s);
}
else if(info[0].equals("e")) {
Employee e = new Employee(info[1],
Integer.parseInt(info[2]),
Boolean.parseBoolean(info[3]),
Double.parseDouble(info[4]),
new Company(info[5]));
personList.add(e);
} else break;
Collections.sort(personList,new Comparator<Person>()
@Override
public int compare(Person o1, Person o2) {
if(o1.equals(null)&&o2.equals(null)) return 0;
if(o1.name.compareTo(o2.name)==0)
return o1.age-o2.age;
else return o1.name.compareTo(o2.name);
}
});
}
for(Person p :personList)
System.out.println(p.toString());
if(sc.next().equals("exit")) {
sc.close();
return ;
}
//对象分类
for(Person p:personList) {
boolean flag = true;
if(p instanceof Student){
//比较相同对象
for(Student s:stuList) {
if(s.equals((Student)p)) {
flag = false;
break;
}
}
if(flag) stuList.add((Student)p);
}else if(p instanceof Employee) {
for(Employee e:empList) {
if(e.equals((Employee)p)) {
flag = false;
break;
}
}
if(flag) empList.add((Employee)p);;
}
}
//输出对象
System.out.println("stuList");
for(Student s:stuList)
System.out.println(s.toString());
System.out.println("empList");
for(Employee e:empList)
System.out.println(e.toString());
sc.close();
}
}