0

我得到了下面的代码作为家庭作业。我被要求为员工对象实施比较器。compare 方法返回一个 int。但是,如果您比较它们,我在员工类中的所有方法都不会返回 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();

}
4

3 回答 3

3

我建议查看此链接

自定义比较器的目标是获取两个对象并确定它们之间的关系。将其视为排序问题。假设我有两个装有红色和蓝色弹珠的袋子。如果我想根据蓝色弹珠对袋子进行比较,这与询问哪个袋子中的蓝色弹珠多/少是一样的。

比较函数的返回值决定了哪个对象的价值高于另一个。让ret是比较两个对象后的值。

  • ret > 0表示左侧对象的价值高于右侧
  • ret < 0表示右侧对象的价值高于左侧
  • ret == 0表示两个对象的值相同

希望这可以帮助。

编辑:

如果您不允许或无法修改 Employee 类,请在您的第一组代码中的比较函数中进行比较。例如,如果你想比较两个整数int aint b,你可以这样做:

a.compareTo(b)

或者

Integer.compare(a, b)

  • 如果a > b:任何一种方法都将返回一个大于0
  • 如果a < b:任何一种方法都会返回一个小于0
  • 如果a == b:任何一种方法都会返回0

只需将此想法应用于您的代码

于 2013-06-14T20:14:49.947 回答
0

实际上,在比较时,您的 Employee 类中的所有字段都返回整数。

此外,每个 Employee 方法都返回一个对象,该对象可以使用compareTo()进行比较以返回一个 int。

您的 Employee 类有两个字段:

String idNumber;
double payRate;

StringDouble(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());
  }
}

上面的比较器严格根据员工 ID 号进行比较。

但是......应该很明显如何修改它以考虑其他领域。

于 2013-06-14T20:18:47.947 回答
-2

那么它总是取决于你想要排序的属性。对于像这样的通用实体,我建议使用它的内部 id。但是:Employee 类实际上设计得很糟糕。getIdNumber()应该返回一个intnot a String。如果您可以重新设计课程,那就去做吧!如果不使用 解析字符串Integer.parseInt(),那么您将有一个 int 进行比较。

于 2013-06-14T20:14:25.200 回答