0

所以我有一个项目来编写一个程序,该程序接受有关钻石的信息并进行比较。这是提示的相关部分:

compareTo() 方法是这样编写的,因此钻石首先按胡萝卜排序,然后按净度或颜色排序,以对特定钻石更好的为准。由于有 23 个颜色等级,但净度只有 11 个等级,所以将前两个颜色等级视为与一级净度等级相同,后两个颜色等级与二级净度等级相同,以此类推. 为了清楚起见比较代码,您将需要一系列 if 语句。

我错过了关于接口的讲座和 compareto() 的东西,但是看着讲义我隐约明白了。这是我到目前为止得到的:enter code here

public class Diamond {
    String stockNumber;
    double carot;
    String clarity;
    char color;
    String cut;
    public Diamond(String startStockNumber, double startCarot, String startClarity, String startCut) {
    stockNumber = startStockNumber;
    carot = startCarot;
    clarity = startClarity;
    cut = startCut;
}
    String getStock() {
        return this.stockNumber;
    }
    double getCarot() {
        return this.carot;
    }
    String getClarity() {
        return this.clarity;
    }
    char getColor(){
        return this.color;
    }
    String getCut() {
        return this.cut;
    }
    void tooString(){
      System.out.println(this+" is stock number "+this.stockNumber+" a "+this.carot+" carot diamond with "+this.clarity+" and a "+this.cut+" cut.");
    }
    int compareTo(Diamond other) {
        if (this.carot<other.carot){
            return -1;
        }
        else if (this.carot>other.carot){
            return 1;
        }
        else{

            }
        }

    }
4

2 回答 2

0

您可以执行以下 2 件事来实现您提到的订单功能。

  1. 使类 Diamond 实现接口 Comparable

    public class Diamond implements Comparable

  2. 用Thomas上面提到的compareTo方法制作你自己的 order 函数。

于 2013-11-12T02:27:44.200 回答
0

所以,你正在编写一个compareTo()函数。那将订购:

  1. 按克拉重量
  2. 通过最大(清晰度,颜色)值。

第一个很容易。

其次,您所要做的就是将清晰度和颜色转换为数值,以使颜色/清晰度权衡成为一个简单的数字“max()”操作。然后将这两个的 max() 与另一颗钻石的 max() 进行比较。

您可以将这些位分解为几个函数:

protected int getColorValue();    // you implement this
protected int getClarityValue();  // you implement this

protected int getColorOrClarityValue() {
    int result = Math.max( getColorValue(), getClarityValue());
    return result;
}

因此:

public int compareTo (Diamond o) {
    int comp = Double.compare( getWeight(), o.getWeight());
    if (comp != 0)
        return comp;
    comp = Integer.compare( getColorOrClarityValue(), o.getColorOrClarityValue());
    return comp;
}

这应该很容易提供一个干净的解决方案。

于 2013-11-12T02:19:59.147 回答