java核心技术(卷I)205页,源码:
以下代码,想实现按工资从小到大排序输出,能通过编译,但运行有问题,为什么呢?import java.util.*;public class EmployeeTest
{
public static void main(String[] args)
{
Employee[] workers = new Employee[3]; 
workers[0] = new Employee("tamik",2000,1999,7,8);
workers[1] = new Employee("Yu dan",2800,1994,7,8);
workers[2] = new Employee("John Rose",2600,2001,7,8);

for( int nI=0; nI<3; nI++)
workers[nI].raiseSalary(5);


for( Employee e : workers)
System.out.println("name="+e.getName()
+",salary="+e.getSalary()
+",hireDay="+e.getHireDay());
Arrays.sort(workers);  //按工资排序
for( Employee e : workers)
System.out.println("name="+e.getName()
+",salary="+e.getSalary()
+",hireDay="+e.getHireDay());
}
}class Employee implements Comparable
{
public Employee(String s, double dbNum, int year,int month,int day)
{
name = s;
salary = dbNum;
GregorianCalendar time=new GregorianCalendar(year,month-1,day);
hireDay = time.getTime();
}
public String getName()
{
return name;
}
public  Date getHireDay()
{
return hireDay;
}
public double getSalary()
{
return salary;
}
public void raiseSalary(double percent)
{
salary *=1+percent/100;
}
public int compareTo(Object other)
{
Employee other2 = (Employee)other;
if(this.salary > other2.salary) return 1;
if(this.salary < other2.salary) return -1;
return 0;
}
private String name; //姓名
private double salary; //工资
private Date hireDay; //雇用日期
}用以下代码,问题同样:
import java.util.*;public class EmployeeTest
{
public static void main(String[] args)
{
Employee[] workers = new Employee[3]; 
workers[0] = new Employee("tamik",2000,1999,7,8);
workers[1] = new Employee("Yu dan",2800,1994,7,8);
workers[2] = new Employee("John Rose",2600,2001,7,8);

for( int nI=0; nI<3; nI++)
workers[nI].raiseSalary(5);


for( Employee e : workers)
System.out.println("name="+e.getName()
+",salary="+e.getSalary()
+",hireDay="+e.getHireDay());
Arrays.sort(workers);  //按工资排序
for( Employee e : workers)
System.out.println("name="+e.getName()
+",salary="+e.getSalary()
+",hireDay="+e.getHireDay());
}
}class Employee implements Comparable<Employee>
{
public Employee(String s, double dbNum, int year,int month,int day)
{
name = s;
salary = dbNum;
GregorianCalendar time=new GregorianCalendar(year,month-1,day);
hireDay = time.getTime();
}
public String getName()
{
return name;
}
public  Date getHireDay()
{
return hireDay;
}
public double getSalary()
{
return salary;
}
public void raiseSalary(double percent)
{
salary *=1+percent/100;
}
public int compareTo(Employee other)
{
if(this.salary > other.salary) return 1;
if(this.salary < other.salary) return -1;
return 0;
}
private String name; //姓名
private double salary; //工资
private Date hireDay; //雇用日期
}