定义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方法要考虑周全
main方法说明
创建若干Student对象、Employee对象。
输入s,然后依次输入name age gender stuNo clazz创建Student对象。
输入e,然后依次输入name age gender salary company创建Employee对象。
然后将创建好的对象放入List<Person> personList。输入其他字符,则结束创建。
创建说明: 对于String类型,如果为null则不创建对象,而赋值为null。对于company属性,如果为null则赋值为null,否则创建相应的Company对象。
对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable<Person>或Comparator<Person>
接受输入,如果输入为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
输出样例:
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
代码长度限制16 KB
时间限制400 ms
内存限制64 MB
import java.text.DecimalFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Person> list = new ArrayList<>();
while (true){
String str = sc.next();
if(str.equals("s")){
list.add(new Student(sc.next(),sc.nextInt(),sc.nextBoolean(),sc.next(),sc.next()));
}else if(str.equals("e")){
list.add(new Employee(sc.next(),sc.nextInt(),sc.nextBoolean(),sc.nextDouble(),new Company(sc.next())));
}else {
break;
}
}
Collections.sort(list);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
String s = sc.next();
if(s.equals("exit")) System.exit(0);
List<Student> studentList = new ArrayList<>();
List<Employee> employeeList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if(list.get(i) instanceof Student){
if(studentList.isEmpty()){
studentList.add((Student) list.get(i));
}else if(!studentList.get(studentList.size()-1).equals(list.get(i))){
studentList.add((Student) list.get(i));
}
}else if(list.get(i) instanceof Employee){
if(employeeList.isEmpty()){
employeeList.add((Employee) list.get(i));
}else if(!employeeList.get(employeeList.size() - 1).equals(list.get(i))){
employeeList.add((Employee) list.get(i));
}
}
}
System.out.println("stuList");
for (int i = 0; i < studentList.size(); i++) {
System.out.println(studentList.get(i));
}
System.out.println("empList");
for (int i = 0; i < employeeList.size(); i++) {
System.out.println(employeeList.get(i));
}
}
}
abstract class Person implements Comparable<Person>{
private String name;
private int age;
private boolean gender;
public Person() {
}
public Person(String name, int age, boolean gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
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 boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
@Override
public String toString() {
return name + "-" + age + "-" + gender;
}
@Override
public boolean equals(Object obj){
Person person = (Person) obj;
if(person.name.equals(this.name) && person.age == this.age && person.gender == this.gender) return true;
else return false;
}
@Override
public int compareTo(Person o) {
int temp = this.name.compareTo(o.name);
return temp == 0 ? this.age - o.age : temp;
}
}
class Student extends Person{
private String stuNo;
private String clazz;
public Student() {
}
public Student(String stuNo, String clazz) {
this.stuNo = stuNo;
this.clazz = clazz;
}
public Student(String name, int age, boolean gender, String stuNo, String clazz) {
super(name, age, gender);
this.stuNo = stuNo;
this.clazz = clazz;
}
@Override
public String toString() {
return "Student:" + getName() + "-" + getAge() + "-" + isGender() + "-" + stuNo + "-" + clazz;
}
@Override
public boolean equals(Object obj){
if(!super.equals(obj)){
return false;
}else {
Student student = (Student) obj;
if(student.stuNo.equals(this.stuNo) && student.clazz.equals(this.clazz)){
return true;
}else {
return false;
}
}
}
}
class Company{
private String name;
public Company() {
}
public Company(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
@Override
public boolean equals(Object obj){
Company company = (Company) obj;
if(company.name.equals(this.name)) return true;
else return false;
}
}
class Employee extends Person{
private Company company;
private double salary;
public Employee() {
}
public Employee(Company company, double salary) {
this.company = company;
this.salary = salary;
}
public Employee(String name, int age, boolean gender, double salary,Company company) {
super(name, age, gender);
this.company = company;
this.salary = salary;
}
@Override
public String toString() {
return "Employee:" + getName() + "-" + getAge() + "-" + isGender() + "-" + company.toString() + "-" + salary;
}
@Override
public boolean equals(Object obj){
if(!super.equals(obj)){
return false;
}else {
Employee employee = (Employee) obj;
DecimalFormat df = new DecimalFormat("#.#");
if(employee.company.equals(this.company) && df.format(employee.salary).equals(df.format(this.salary))){
return true;
}else {
return false;
}
}
}
}
