2016-11-18 91 views
0

在我的課程中,教職員的詳細信息如姓名的出生日期,狀態。這只是教師的印刷。 我得到的輸出是這樣的:工作人員和教職員工姓名和年薪降序

John was born on Sun Jan 03 00:00:00 MST 1971: fulltime 

然後我想打印的姓名和每個工作人員和教師與薪酬必須按降序排列的年薪。 我得到這樣的輸出:

John was born on Sun Jan 03 00:00:00 MST 1971: fulltime 
[Barry was born on Tue Jan 02 00:00:00 MST 1973: part-time, Andy was born on Wed Nov 12 00:00:00 MST 1980: full-time, 
Name: Edith Annual Salary : 7416.666666666666, 
Name: Don Annual Salary : 5866.666666666667, 
Name: Cathy Annual Salary : 2900.0] 

,但我只是得到了工作人員的名字和年薪。我想打印教師姓名和年薪。我不知道我在哪裏錯了? 我該怎麼做?

Person類:

public abstract class Person implements Comparable<Person> { 
    protected String firstName; 
    protected java.util.Date birthdate; 

    public Person(String firstName, java.util.Date birthdate) { 
     this.firstName = firstName; 
     this.birthdate = birthdate; 
    } 

    public java.util.Date getBirthdate() { 
     return birthdate; 
    } 

    public String getName() { 
     return firstName; 
    } 

    public void setName(String firstName) { 
     this.firstName = firstName; 
    } 

    public void setBirthdate(java.util.Date birthdate) { 
     this.birthdate = birthdate; 
    } 

    public String toString() { 
     return " \n" + " Name: " + getName()+ " " + " Annual Salary : " + getSalary(); 
    } 

    public abstract Double getSalary(); 

    public int compareTo(Person o) { 
     Person per =(Person)o; 

      if (this.getSalary() > per.getSalary()){ 
       return -1; 
      }else if (this.getSalary() < per.getSalary()){ 
       return 1; 
      }else 
       return 0; 

    } 

} 

系類:

public class Faculty extends Person{ 

    private double monthlySalary; 
    private String status; 
    public Faculty(String firstName, Date birthdate, double salaryln, String statusln) { 
     super(firstName, birthdate); 

     this.monthlySalary = salaryln; 
     this.status = statusln; 
     // TODO Auto-generated constructor stub 
    } 

@Override 

    public Double getSalary() { 
     // TODO Auto-generated method stub 
     double fsalary = monthlySalary*9.0; 
     return fsalary; 
    } 

    public String getStatus() { 
     return status; 
    } 
    public void setStatus(String status) { 
     this.status = status; 
    } 

    public double getMonthlySalary() { 
     return monthlySalary; 
    } 

    public void setMonthlySalary(double monthlySalary) { 
     this.monthlySalary = monthlySalary; 
    } 

    public String toString(){ 
      return getName() + " was born on " + birthdate + ": " + getStatus(); 
     } 

} 

人員類別:

public class Staff extends Person{ 

    private double annualSalary; 
    private double experience; 

    public Staff(String firstName, Date birthdate, double salaryln, double experienceln) { 
     super(firstName, birthdate); 
     this.annualSalary = salaryln; 
     this.experience = experienceln; 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Double getSalary() { 
     // TODO Auto-generated method stub 
     double staffSalary = annualSalary + annualSalary*(30.0-experience)/60.0; 
     return staffSalary; 
    } 

    public double getAnnualSalary() { 
     return annualSalary; 
    } 

    public void setAnnualSalary(double annualSalary) { 
     this.annualSalary = annualSalary; 
    } 

    public double getExperience() { 
     return experience; 
    } 

    public void setExperience(int experience) { 
     this.experience = experience; 
    } 

} 

PersonTest類:

public class PersonTest { 

    public static void main(String[] args) throws ParseException { 
     // TODO Auto-generated method stub 

      String pattern = "MM/dd/yyyy"; 
      SimpleDateFormat format = new SimpleDateFormat(pattern); 
      Date date = format.parse("01/03/1971"); 
      Faculty faculty = new Faculty("John", date, 2000, "fulltime"); 
      System.out.println(faculty); 



     Person[] ps = new Person[5]; 

     ps[0] = new Staff("Cathy", format.parse("8/19/1968"), 2000.0, 3.0); 
     ps[1] = new Staff("Don", format.parse("4/17/1969"), 4000.0, 2.0); 
     ps[2] = new Staff("Edith", format.parse("10/28/1979"), 5000.0, 1.0); 
     ps[3] = new Faculty("Andy", format.parse("11/12/1980"), 4000.0, "full-time"); 
     ps[4] = new Faculty("Barry", format.parse("1/2/1973"), 6000.0, "part-time"); 




     Arrays.sort(ps); 

     System.out.println(Arrays.toString(ps)); 
     System.out.println(); 

    } 

} 
+0

創建一個自定義比較器來執行此操作。 – ifly6

+0

@ ifly6我需要使用Comparable與比較器? – danny

+0

把它們全部放入一個'List'(或其他可排序的集合或數組)中,然後用一個定義應該如何排列的「Comparator」進行排序。您現在可以使用Java 8創建一個自定義比較器,只要'x.variable()'返回可以按自然順序排序的東西,就可以沿着'Comparator.comparing(x - > x.variable訂購。之後,你可以使用'comparator.thenComparing(Comparator.comparing(x - > x.num()));'繼續下去。 – ifly6

回答

0

Faculty類,重寫toString()像這樣:

// There should be a @Override here. 
public String toString(){ 
    return getName() + " was born on " + birthdate + ": " + getStatus(); 
} 

這意味着當打印陣列,這將調用Faculty::toString,它打印你定義什麼作爲String表示的Faculty對象的,這是名字與一些出生日期和地位。

如果你想使用Person定義,你應該停止重寫toString方法,因此具有Faculty默認超類的toString方法,它打印(或者的Faculty::toString名稱更改爲不同的東西),或投FacultyPerson這樣您可以訪問Person::toString並使用該方法進行打印而不是重寫版本。

此外,如果您的Person::compareTo幾乎是簡單的整數比較,您可以使用:return Integer.compare(this.getSalary(), o.getSalary())

如果您發現我的答案有用,請接受它!

+0

如何停止覆蓋toString方法? – danny

+0

您將其從教師課程中刪除 – ifly6