在我的课程中,教职员的详细信息如姓名的出生日期,状态。这只是教师的印刷。 我得到的输出是这样的:工作人员和教职员工姓名和年薪降序
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();
}
}
创建一个自定义比较器来执行此操作。 – ifly6
@ ifly6我需要使用Comparable与比较器? – danny
把它们全部放入一个'List'(或其他可排序的集合或数组)中,然后用一个定义应该如何排列的“Comparator”进行排序。您现在可以使用Java 8创建一个自定义比较器,只要'x.variable()'返回可以按自然顺序排序的东西,就可以沿着'Comparator.comparing(x - > x.variable订购。之后,你可以使用'comparator.thenComparing(Comparator.comparing(x - > x.num()));'继续下去。 – ifly6