我将以下代码作为家庭作业。我被要求为员工对象实施比较器。 compare方法返回一个int。但是,如果您比较它们,我在employee类中的方法都不会返回int。谁能给我一些关于比较方法应该如何工作的指导?谢谢
import java.util.*;
import java.io.*;
public class EmployeeClient
{
//A Comparator for Employees
// Primary key : Employee category - Salaried > Weekly > Daily
// Secondary key : Employee gross pay
private static class EmployeeComparator implements Comparator
{
public int compare(Object one, Object two)
{
Employee uno = (Employee) one;
Employee dos = (Employee) two;
}
}
public abstract class Employee {
private String idNumber;
private double payRate;
//Accessor: Return the id number of employee
public String getidNumber()
{
return idNumber;
}
//Accessor: Return the payrate of the employee
public double getpayRate()
{
return payRate;
}
public String toString()
{
return getidNumber()+" "+getpayRate();
}
public abstract double grossPay();
}
答案 0 :(得分:3)
我建议您查看this link。
自定义比较器的目标是获取两个对象并确定它们之间的关系。认为这是一个订购问题。说我有两个装有红色和蓝色大理石的袋子。如果我想用蓝色弹珠比较袋子,就像要求哪个袋子里面有更多/更少的蓝色弹珠一样。
比较函数的返回值确定哪个对象的值高于另一个。在比较两个对象后,让ret
为值。
ret > 0
表示左侧对象的值高于右侧ret < 0
表示正确的对象的价值高于左侧ret == 0
表示两个对象的值相同希望这有帮助。
修改强>
如果您不允许或无法修改Employee类,请在第一组代码中的比较函数中进行比较。例如,如果您想比较两个整数int a
和int b
,您可以这样做:
a.compareTo(b)
或
Integer.compare(a, b)
a > b
:任何一种方法都会返回大于0
a < b
:任一方法都会返回小于0
a == b
:任何一种方法都会返回0
只需将此想法应用于您的代码
即可答案 1 :(得分:0)
实际上,在比较时,Employee类中的所有字段都会返回整数。
此外,每个Employee方法返回一个对象,可以使用 compareTo()进行比较以返回int。
您的Employee类有两个字段:
String idNumber;
double payRate;
String
和Double
(double的对象形式)都有一个返回int的 compareTo()方法。
所以...你的 EmployeeComparator.compare()方法可以简单地返回:
one.getidNumber().compareTo(two.getidNumber());
以下是重写Comparator类的方法:
private static class EmployeeComparator implements Comparator<Employee>
{
public int compare(Employee empOne, Employee empTwo)
{
return empOne.getidNumber().compareTo(empTwo.getidNumber());
}
}
上面的比较器严格按照员工身份号码进行比较。
但是......应该明白如何修改它以考虑其他领域。
答案 2 :(得分:-2)
那么它总是取决于你想要排序的属性。对于像这样的通用实体,我会建议它的内部id。但是:Employee类的设计实际上很差。 getIdNumber()
应该返回int
而不是String
。如果你可以重新设计课程,那就去做吧!如果不使用Integer.parseInt()
解析字符串,那么你将有一个用于比较的int。