jmu-Java-03面向對象-06-繼承覆蓋綜合練習-Person、Student、Employee、Company (20 分) ///答案,不包括解析


 

定義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方法重要說明:

  1. 對Employee的company屬性的比較。要考慮傳入為null的情況。如果company不為null且傳入為null,返回false
  2. 對所有String字符類型比較時,也要考慮null情況。

提示

  1. 排序可使用Collections.sort
  2. equals方法要考慮周全

main方法說明

  1. 創建若干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對象。

  2. 對personList中的元素實現先按照姓名升序排序,姓名相同再按照年齡升序排序。提示:可使用Comparable<Person>Comparator<Person>

  3. 接受輸入,如果輸入為exitreturn退出程序,否則繼續下面步驟。

  4. 將personList中的元素按照類型分別放到stuList與empList。注意:不要將兩個內容相同的對象放入列表(是否相同是根據equals返回結果進行判定)。

  5. 輸出字符串stuList,然后輸出stuList中的每個對象。

  6. 輸出字符串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()); } } } } }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM