0

我正在开发一个“特许经营”程序,该程序具有所有者、状态和销售额,它们都在构造函数中设置并且无法更改。当我尝试编写 compareTo 方法时,我的问题就出现了。

package prob2;

public class Franchise implements Comparable <Franchise>  {
    final String owner;
    final String state;
    final double sales;

protected Franchise(String owner, String state, double sales ) {
    this.owner = owner;
    this.state = state;
    this.sales = sales;
}

public String toString() {
    String str = state + ", " + sales + ", " + owner;
    return str;
}

public String getState() {
    return state;
}

public double getSales() {
    return sales;
}
public int compareTo(Franchise that) {
    double thatSales = that.getSales();
    if (this.getState().compareTo(that.getState()) <0) 
        return -1;
    else if (this.getSales() > thatSales)
        return -1;
    else if (this.getSales() < thatSales)
        return 1;
    else
        return 0;
}

该程序应实现可比较接口,并应基于状态 ASCENDING 和销售 DESCENDING 比较 Franchise 对象。我的问题是如何使用这两个值进行比较,有没有办法在一次比较中进行比较,或者我需要多个比较器?

例子:

state = CA, sales = 3300 与 state = NC, sales = 9900 相比将返回 NEGATIVE

state = CA, sales = 3300 与 state = CA, sales = 1000 相比,将返回 NEGATIVE

state = CA, sales = 3300 与 state = CA, sales = 9900 相比将返回 POSITIVE

感谢您的任何帮助。

4

3 回答 3

2

有没有办法在一次比较中做到这一点,还是我需要多个比较器?

在您的情况下,您不需要多个比较器。compareTo只需按照以下方式以单一方法编写基于这两个属性的逻辑:

public int compareTo(Franchise that) {
    if (this.getState().equals(that.getState()) {
        // Compare on the basis of sales (Take care of order - it's descending here)
    } else {
        // Compare on the basis of states.
    }
}
于 2013-09-10T15:31:34.857 回答
0

您需要通过实现Comparator接口来创建不同的比较器。根据排序参数,您需要在Collections.sort方法中使用适当的比较器类。

于 2013-09-10T15:28:12.213 回答
0

当然,您只能compare在伪代码中使用一种方法:

lessThan(this.state, a.state) && this.sales > a.sales

(或类似的东西)

于 2013-09-10T15:30:36.067 回答