PTA:7-1 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company

定义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对象。

  1. 对personList中的元素实现先按照姓名升序排序,姓名相同再按照年龄升序排序。提示:可使用Comparable<Person>Comparator<Person>

  2. 接受输入,如果输入为exitreturn退出程序,否则继续下面步骤。

  3. 将personList中的元素按照类型分别放到stuList与empList。注意:不要将两个内容相同的对象放入列表(是否相同是根据equals返回结果进行判定)。

  4. 输出字符串stuList,然后输出stuList中的每个对象。

  5. 输出字符串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:bo-25-true-IBM-5000.52
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.*;

/**
 * @author: PQ丶Lee
 * @createTime: 2022-11-17 18:30
 **/
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        List<Person> personList = new ArrayList<>() ;
        boolean loop = true;
        while (loop) {
            String key = sc.next();
            if (key.charAt(0) == 's') {
                //(String name, int age, boolean gender, String stuNo, String clazz)
                String name = sc.next();
                int age = sc.nextInt();
                boolean b = Boolean.parseBoolean(sc.next());
                String stuNo = sc.next();
                String clazz = sc.next();
                if (name == null || stuNo== null || clazz==null){
                    personList.add(new Student(name, age, b, stuNo, clazz));
                }else {
                    personList.add(new Student(name, age, b, stuNo, clazz));
                }
            } else if (key.charAt(0) == 'e') {
                //Employee(String name, int age, boolean gender,  double salary,Company company)
                String name1 = sc.next();
                int age = sc.nextInt();
                boolean b = Boolean.parseBoolean(sc.next());
                double sal = sc.nextDouble();
                String name2 = sc.next();
                if (name1==null||name2==null){
                    personList.add(new Employee(name1, age, b, sal, new Company(name2)));
                }else {
                    personList.add(new Employee(name1, age, b, sal, new Company(name2)));
                }
            } else {
                loop = false;
            }
        }

        Collections.sort(personList, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if (!(o1.getName().equals(o2.getName()))) {
                    return o1.getName().compareTo(o2.getName());
                } else {
                    return o1.getAge() - o2.getAge();
                }
            }
        });
        for (Person p :personList){
            System.out.println(p);
        }
        String key2 = sc.next();
        if (key2.equals("exit") || key2.equals("return")){
            System.exit(0);
        }
        List<Student> stuList = new ArrayList<>();
        List<Employee> empList = new ArrayList<>();
        for (Object obj : personList){
            if (obj instanceof Student) {
                Student stu = (Student) obj;
                boolean lo = true;
                for (Student student :stuList){
                    if (stu.equals(student)){
                        lo = false;
                    }
                }
                if (lo){
                    stuList.add(stu);
                }
            } else if (obj instanceof Employee) {
                Employee emp = (Employee) obj;
                boolean lo = true;
                for (Employee employee :empList){
                    if (emp.equals(employee)){
                        lo = false;
                    }
                }
                if (lo){
                    empList.add(emp);
                }

            }
        }
        System.out.println("stuList");
        for (Student s :stuList){
            System.out.println(s);
        }
        System.out.println("empList");
        for (Employee e :empList){
            System.out.println(e);
        }
    }
}
abstract class Person {
    private String name;
    private int age;
    private boolean 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;
    }

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

    @Override
    public String toString() {
        return this.name + "-" + this.age + "-" + this.gender;
    }

    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person person = (Person) obj;
            return (this.name.equals(person.name)) && (this.gender == person.gender) && (this.age == person.age);
        }
        return false;
    }
}

/**
 * //建议使用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。
 */
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.stuNo = stuNo;
        this.clazz = clazz;
    }

    @Override
    public String toString() {
        return "Student:"+super.toString() + "-" + stuNo + "-" + clazz;
    }

    public boolean equals(Object obj) {
        if (super.equals(obj)) {
            if (obj instanceof Student) {
                Student student = (Student) obj;
                return this.stuNo.equals(student.stuNo) && this.clazz.equals(student.clazz);
            }
        }

        return false;
    }
}

/**
 * public Company(String name);
 * public String toString();         //直接返回name
 * public boolean equals(Object obj);//name相同返回true
 */
class Company {
    private String name;

    public Company(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }

    public boolean equals(Object obj) {
        if (obj instanceof Company) {
            Company company = (Company) obj;
            return company.name.equals(company.name);
        }
        return false;

    }
}

/**
 * //建议使用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位小数
 */
class Employee extends Person {
    private Company company;
    private double salary;
//new Employee(name1, sc.nextInt(), Boolean.parseBoolean(sc.next()), sc.nextDouble(), new Company(name2))
    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:"+super.toString() + "-" + this.company + "-" + this.salary;
    }

    public boolean equals(Object obj) {
        if (super.equals(obj)) {
            if (obj instanceof Employee) {
                Employee employee = (Employee) obj;
                if (this.salary != employee.salary) {
                    return false;
                }
                if (company == null) {
                    return false;
                }
                return true;
            }
        }
        return false;
    }
}



效果实现图:

 

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值