7-2 jmu-Java-03面向對象-06-繼承覆蓋綜合練習-Person、Student、Employee、Company (20 分)

7-2 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 personList。輸入其他字符,則結束創建。
    創建說明: 對於String類型,如果爲null則不創建對象,而賦值爲null。對於company屬性,如果爲null則賦值爲null,否則創建相應的Company對象。
  2. 對personList中的元素實現先按照姓名升序排序,姓名相同再按照年齡升序排序。提示:可使用ComparableComparator
  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.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

class Person {
    private String name;
    private int age;
    private boolean gender;
    private String str;

    Person(String name, int age, boolean gender, String str) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.str = str;
    }

    public String toString() {
        return name + "-" + age + "-" + gender;
    }

    @Override
    public boolean equals(Object obj) {
        Person aPerson = (Person) obj;
        if (aPerson.name == null || this.name == null) {
            return false;
        }
        return aPerson.name.compareTo(this.name) == 0 && aPerson.age == this.age && aPerson.gender == this.gender;
    }

    String getName() {
        return name;
    }

    int getAge() {
        return age;
    }

    String getStr() {
        return str;
    }
}

class Student extends Person {
    private String stuNo;
    private String clazz;

    Student(String name, int age, boolean gender, String str, String stuNo, String clazz) {
        super(name, age, 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)) {
            if (this.stuNo == null | this.clazz == null || a.clazz == null || a.stuNo == null) {
                return false;
            }
            return this.clazz.compareTo(a.clazz) == 0 && this.stuNo.compareTo(a.stuNo) == 0;
        }
        return false;
    }

}

class Company {
    private String name;

    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) {
            return other.name == null;
        } else return name.equals(other.name);
    }
}

class Employee extends Person {
    private Company company;
    private double salary;

    Employee(String name, int age, boolean gender, String str, Company company, double salary) {
        super(name, age, 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)) {
            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);
            return this.company.toString().compareTo(other.company.toString()) == 0 && df1.compareTo(df2) == 0;
        }
        return false;
    }

}

public class Main {
    /**
     * @param args null
     * @author 徐亮亮
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String c;
        String nameString;
        int age;
        boolean gender;
        ArrayList<Person> persons = new ArrayList<>();
        ArrayList<Student> students = new ArrayList<>();
        ArrayList<Employee> employees = new ArrayList<>();
        String tempString;
        String stuNoString;
        String company;
        String clazzString;
        double salary;
        while (true) {
            c = sc.next();
            if (c.compareTo("s") == 0) {
                nameString = sc.next();
                age = sc.nextInt();
                gender = sc.nextBoolean();
                stuNoString = sc.next();
                clazzString = sc.next();
                Student tempStudent = new Student(nameString, age, gender, c, stuNoString, clazzString);
                persons.add(tempStudent);
            } else if (c.compareTo("e") == 0) {
                nameString = sc.next();
                age = sc.nextInt();
                gender = sc.nextBoolean();
                salary = sc.nextDouble();
                company = sc.next();
                Company company2 = new Company(company);
                Employee tempEmployee = new Employee(nameString, age, gender, c, company2, salary);
                persons.add(tempEmployee);
            } else {
                persons.sort(Comparator.comparing(Person::getName).thenComparingInt(Person::getAge));
                for (Person person : persons) {
                    if (person.getStr().compareTo("s") == 0) {
                        System.out.println("Student:" + person.toString());
                        int flag = 0;
                        for (Student student : students) {
                            if (student.equals(person)) {
                                flag = 1;
                                break;
                            }
                        }
                        if (flag == 0) {
                            students.add((Student) person);
                        }

                    } else {
                        System.out.println("Employee:" + person.toString());
                        int flag = 0;
                        for (Employee employee : employees) {
                            if (employee.equals(person)) {
                                flag = 1;
                                break;
                            }
                        }
                        if (flag == 0) {
                            employees.add((Employee) person);
                        }

                    }
                }
                tempString = sc.next();
                if (tempString.compareTo("exit") == 0 || tempString.compareTo("return") == 0) {
                    return;
                }
                System.out.println("stuList");
                for (Student student : students) {
                    System.out.println("Student:" + student.toString());
                }
                System.out.println("empList");
                for (Employee employee : employees) {
                    System.out.println("Employee:" + employee.toString());
                }

            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章