2013-08-21 57 views
1

我想在這裏刷新我的Java技能。我正在做一個簡單的java任務。以下是前兩條說明。排序年齡的方法,並列出

  1. 具有以下屬性/變量創建一個Employee類: 名 年齡 部門

  2. 創建一個名爲Department類將包含員工的列表。

a)部門類將有一種方法,將按年齡返回其員工。

二)部門的價值只能是下列值之一: 「會計」 「營銷」 「人力資源」 「信息系統」

我有步驟有點麻煩2.我需要幫助搞清楚如何增加員工的名單像它說,並怎麼寫,這將通過排序由年齡下令回報員工的方法。
我只是想有人來解釋如何做到這一點。謝謝。

到目前爲止,我有這個。

Employee類:

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; 
    } 

} 
+0

作爲設計點,您可能不應該對部門類型使用'enum',因爲它們可以相對頻繁地更改。另外,你所說的「部門」只是部門的名字。 'Department'應該是一個包含'Employee'對象集合的類。 –

+0

使Employee類實現Comparator接口 – rozar

+0

到目前爲止(b)你只需要在你的setter中爲'department'變量提供一些驗證。提供一個允許的部門字符串的靜態集合,並在設置'Employee'部門時檢查。如果失敗,則重新提示用戶輸入可接受的密碼。另外,我不能確定,但​​是,在你的Employee中似乎有一個'Department'實例似乎是錯誤的。爲什麼你需要在員工記錄中可能包含數千條記錄的部門。我認爲你需要與此相反。 – ChiefTwoPencils

回答

3

您有解決的辦法的開端,但你是關閉又一個途徑。

您的Department類(應該是類而不是枚舉類),應該包含Employee對象的集合。程序中還應該有頂級部門的集合。

至於排序,你應該看看Comparator接口。您實現了Comparator的自定義子類,該子類允許內置集合排序算法比較員工實例,以實現所需的順序。

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

這可以通過返回-1如果這Employee是年齡小於e,零,如果它們是相同的年齡和+1如果這Employee是老年人滿足Comparator合同。

+0

我建議你在Employee類中實現'Comparable'。可比較起來更簡單也更自然 - 您將其視爲爲Employee實例定義首選默認排序順序。 「比較器」更靈活一般。您可以將比較器插入到特定的集合中,以便在此處及時控制所需的排序順序。 –

+1

在這種情況下,我建議使用單獨的「比較器」,因爲可能會有幾種不同的方式對員工進行排序。我可能會將主排序選項放在Employee對象中,但年齡不會是我對主排序選項的選擇。 –

1

您可以設置員工列表按年齡,當你添加僱員到列表進行排序。 然後,當你想獲得列表,你只需要返回它。

您不應該在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; 
    } 

}