compareTo()帮助(钻石比较项目)

时间:2013-11-12 02:03:08

标签: java compareto

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

  

编写方法compareTo(),以便首先通过carot,然后通过清晰度或颜色来订购钻石,以特定钻石为准。由于有23个等级的颜色,但只有11个等级的清晰度,因此前两个颜色等级的等级与第一等级的清晰度相同,接下来的两个颜色等级等级等级为二等级的清晰度,依此类推。为了清楚起见,在比较代码时,您需要一系列if语句。

我错过了关于界面和比较()的东西的讲座,但看着我隐约明白的讲义。这是我到目前为止所得到的: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{

            }
        }

    }

2 个答案:

答案 0 :(得分:0)

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

  1. 克拉重量
  2. by max(Clarity,Color)值。
  3. 第一个很容易。

    对于第二个,你所要做的就是转换Clarity&amp;将颜色转换为数值,使颜色/清晰度权衡为简单的数字“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;
    }
    

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

答案 1 :(得分:0)

您可以执行以下两项操作来实现您提到的订单功能。

  1. 使类钻石工具界面 Comparable

    public class Diamond implements Comparable

  2. 使用上面提到的 Thomas compareTo方法中创建自己的订单功能。