2016-11-18 71 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

相关问题