【问题标题】:Sort by age method, and list in class按年龄方法排序,并在类中列出
【发布时间】:2013-08-21 00:15:51
【问题描述】:

我正在尝试在这里刷新我的 Java 技能。我正在做一个简单的java作业。以下是前两个说明。

  1. 创建具有以下属性/变量的 Employee 类: 姓名 年龄 部门

  2. 创建一个名为 Department 的类,该类将包含员工列表。

a) Department 类将有一个方法,该方法将返回按年龄排序的员工。

b) 部门的值只能是以下值之一: “会计” “营销” “人力资源” “信息系统”

我在第 2 步遇到了一点问题。我需要帮助弄清楚如何添加员工列表,以及如何编写将通过按年龄排序的员工返回
我只想有人解释如何做到这一点。谢谢。

到目前为止,我有这个。

员工等级:

 package simpleJavaAssignment;

public class Employee {
String name;
int age;
Department department;


Employee(String n, int a, Department d)
{
    this.name = n;
    this.age = a;
    this.department = d;
}
int gAge(){

return age;
}
}

部门类:

package simpleJavaAssignment;
import java.util.*;

public enum Department {

   ACCOUNTING("Accounting"), MARKETING("Marketing"), HUMAN_RESOURCES(
        "Human Resources"), INFORMATION_SYSTEMS("Information Systems");

   private String deptName;

    Department(String deptName) {
       this.deptName = deptName;
    }

   @Override
   public String toString() {
    return this.deptName;
   }

}

【问题讨论】:

  • 作为一个设计点,您可能不应该将enum 用于部门类型,因为它们可以相对频繁地更改。另外,您所说的Department 只是一个部门的名称。 Department 应该是一个包含 Employee 对象集合的类。
  • 让Employee类实现Comparator接口
  • 就 (b) 而言,您只需要在您的设置器中为 department 变量提供一些验证。提供允许的部门字符串的静态集合,并在设置 Employee 的部门时对其进行检查。如果失败,则重新提示用户选择可接受的。另外,我不能确定,但​​似乎在您的 Employee 中有一个 Department 实例似乎是错误的。为什么您需要可能在员工记录中包含数千个条目的部门。我认为你需要反过来。
  • 我还必须考虑Department 是否不是特定部门扩展的超类。

标签: java


【解决方案1】:

你已经有了一个解决方案的开始,但你还有很长的路要走。

您的 Department 类(应该是类而不是枚举)应该包含 Employee 对象的集合。在您的计划中还应该有一个顶级部门的集合。

关于排序,你应该看看Comparator接口。您实现了Comparator 的自定义子类,它允许内置集合排序算法比较 Employee 实例,从而实现所需的顺序。

public class EmployeeAgeComparator implements Comparator<Employee>
{
    public int compare(Employee e) 
    {
        return (this.age < e.age)
            ? -1
            : (this.age > e.age) 
                 ? +1
                 : 0;
    }
}

如果此Employee 小于e,则返回-1 来满足Comparator 合同,如果它们相同年龄则为零,如果此Employee 较大则返回+1

【讨论】:

  • 我建议你在 Employee 类中实现Comparable。 Comparable 更简单、更自然——您可以将其视为为 Employee 实例定义首选的默认排序顺序。 Comparator 更灵活通用。您可以将 Comparator 插入到特定集合中,以便在此时此地控制您想要的排序顺序。
  • 在这种情况下,我建议使用单独的Comparator,因为可能会有几种不同的方式来对员工进行排序。我可能会将主要排序选项放在 Employee 对象中,但我不会选择年龄作为主要排序选项。
【解决方案2】:

当您将员工添加到列表时,您可以设置按年龄排序的员工列表。 然后当你想获取列表时,你只需返回它。

Employee 类中不应包含Department 成员,相反,Department 类应包含Employee 的列表。

package simpleJavaAssignment;
import java.util.*;

public class Department {
    private String deptName;
    private ArrayList<Employee> employees;

    Department(String deptName) {
       this.deptName = deptName;
       this.employees = new ArrayList<Employee>();
    }
    public String toString() {
        return this.deptName;
    }
    public void addEmployee(Employee a){
        if( employees.isEmpty())
        employees.add(a);
        else
        {
        int i;
        for( i = 0; i < employees.size(); ++i ){
               if( employees.get(i).gAge() > a.gAge()  ){
                   employees.add(i, a);
                   break;
               }
            }
        if( i == employees.size() )
            employees.add(a);

        }
    }

    public ArrayList<Employee> getEmployees(){
        return employees;
    }

}

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2021-06-28
    • 1970-01-01
    • 2019-02-23
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多