定义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
答案
import java.awt.list; import java.awt.texturepaint; import java.lang.reflect.array; import java.text.decimalformat; import java.util.arraylist; import java.util.arrays; import java.util.collections; import java.util.comparator; import java.util.scanner; import javax.naming.binaryrefaddr; import javax.security.auth.subjectdomaincombiner; import javax.sound.sampled.line; class person{ private string name; private int avg; private boolean gender; private string str; public person(string name, int avg, boolean gender,string str) { this.name = name; this.avg = avg; this.gender = gender; this.str = str; } public string tostring() { return name+"-"+avg+"-"+gender; } public boolean equals(object obj) { person aperson = (person)obj; if(aperson.name==null||this.name==null) { return false; } if(aperson.name.compareto(this.name)==0&&aperson.avg==this.avg&&aperson.gender==this.gender) { return true; } return false; } public string getname() { return name; } public int getavg() { return avg; } public string getstr() { return str; } public boolean getgender() { return gender; } } class student extends person { private string stuno; private string clazz; public student(string name, int avg, boolean gender, string str, string stuno, string clazz) { super(name, avg, gender, str); this.stuno = stuno; this.clazz = clazz; } public string tostring() { return super.tostring()+"-"+stuno+"-"+clazz; } public boolean equals(object obj) { student a = (student)obj; if(super.equals(obj)==true) { if(this.stuno==null|this.clazz==null||a.clazz==null||a.stuno==null) { return false; } if(this.clazz.compareto(a.clazz)==0&&this.stuno.compareto(a.stuno)==0) return true; } return false; } public string getstuno() { return stuno; } public string getclazz() { return clazz; } } class company{ private string name; public company(string name) { this.name = name; } @override public string tostring() { return name; } @override public boolean equals(object obj) { if (this == obj) return true; if (obj == null) return false; if (getclass() != obj.getclass()) return false; company other = (company) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } class employee extends person{ private company company; private double salary; public employee(string name, int avg, boolean gender, string str, company company, double salary) { super(name, avg, gender, str); this.company = company; this.salary = salary; } @override public string tostring() { return super.tostring()+"-"+company.tostring()+"-"+salary; } @override public boolean equals(object obj) { if(super.equals(obj)==true) { employee other = (employee)obj; if(this.company.tostring()==null||other.company.tostring()==null) { return false; } string df1 = new decimalformat("#.#").format(this.salary); string df2 = new decimalformat("#.#").format(other.salary); if(this.company.tostring().compareto(other.company.tostring())==0&&df1.compareto(df2)==0) { return true; } } return false; } public company getcompany() { return company; } public double getsalary() { return salary; } } public class main { public static void main(string[] args) { // todo auto-generated method stub scanner sc = new scanner(system.in); string c; string namestring; int avg; boolean gender; arraylist<person> persons = new arraylist<person>(); arraylist<student> students = new arraylist<student>(); arraylist<employee> employees = new arraylist<employee>(); string tempstring; string stunostring; string company; string clazzstring; double salary; while(true) { c = sc.next(); if(c.compareto("s")==0) { namestring = sc.next(); avg = sc.nextint(); gender = sc.nextboolean(); stunostring = sc.next(); clazzstring = sc.next(); student tempstudent = new student(namestring, avg, gender, c, stunostring, clazzstring); persons.add(tempstudent); }else if(c.compareto("e")==0) { namestring = sc.next(); avg = sc.nextint(); gender = sc.nextboolean(); salary = sc.nextdouble(); company = sc.next(); company company2 = new company(company); employee tempemployee = new employee(namestring, avg, gender, c, company2, salary); persons.add(tempemployee); }else { persons.sort(comparator.comparing(person::getname).thencomparingint(person::getavg)); for(int i=0;i<persons.size();i++) { if(persons.get(i).getstr().compareto("s")==0) { system.out.println("student:"+persons.get(i).tostring()); int flag = 0; for(int j=0;j<students.size();j++) { if(students.get(j).equals(persons.get(i))) { flag=1; break; } } if(flag == 0) { students.add((student) persons.get(i)); } }else { system.out.println("employee:"+persons.get(i).tostring()); int flag = 0; for(int j=0;j<employees.size();j++) { if(employees.get(j).equals(persons.get(i))) { flag = 1; break; } } if(flag == 0) { employees.add((employee)persons.get(i)); } } } tempstring = sc.next(); if(tempstring.compareto("exit")==0||tempstring.compareto("return")==0) { return; } system.out.println("stulist"); for(int i=0;i<students.size();i++) { system.out.println("student:"+students.get(i).tostring()); } system.out.println("emplist"); for(int i=0;i<employees.size();i++) { system.out.println("employee:"+employees.get(i).tostring()); } } } } }