简体   繁体   English

使用可比界面的问题

[英]Issues utilizing the comparable interface

I am trying to utilize the comparable interface to sort an array. 我试图利用可比的接口对数组进行排序。 The method compareTo() is written so that diamonds are ordered first by carot, then by clarity OR color, whichever is better for the particular diamond. 编写方法compareTo(),以便首先按菱形排序钻石,然后按净度或颜色排序,以特定钻石为佳。 Since there are 23 grades of color, but only 11 grades of clarity, regard the first two color grades as equal in grade to the first grade of clarity, the next two color grades equal in grade to the second grade of clarity, and so on. 由于有23种颜色等级,但只有11种透明度,因此将前两个颜色等级等同于第一个透明度等级,将后两个颜色等级等同于第二个透明度等级,依此类推。 I'm not sure how to compare the color to the clarity since one is a string and the other is a char. 我不确定如何比较颜色和清晰度,因为一个是字符串,另一个是字符。 Here is what I have so far. 这是我到目前为止所拥有的。

public Diamond(String sN, double car, String clar, char col, String cutType)
{
    stockNumber = sN; 
    carot = car; 
    clarity = clar; 
    color = col; 
    cut = cutType;

}

public int compareTo(Diamond other)
{
    if (getCarot() < other.getCarot())
    {
        return 1;
    }
    else if(getCarot() > other.getCarot())
    {       
        return -1;
    }
    else return 0; 
}
public String toString()
{
    return "{stockNumber :: " +getStock() + " carot :: " +getCarot() + " clarity :: " +getClarity()+ " color :: " +getColor() + " cut :: " +getCut()+"}";
    }


//gets the stock number of the diamond
public String getStock()
{
    return stockNumber; 
}

//gets the carot size of the diamond
public double getCarot()
{
    return carot;
}

//gets the clarity of the diamond
public String getClarity()
{
    return clarity; 
}

//gets the color of the diamond
public char getColor()
{
    return color;
}

//gets the cut of the diamond 
public String getCut()
{
    return cut; 
}

Diamond[] stones = new Diamond[16]; Diamond []宝石=新Diamond [16];

stones[0] = new Diamond( "A1023", 1.0, "VS1",  'F', "brilliant");
stones[1] = new Diamond( "A5911", 1.1, "VVS2", 'G', "rose");
stones[2] = new Diamond( "C5427", 1.0, "VS1",  'D', "princess");
stones[3] = new Diamond( "D8307", 1.6, "SI1",  'H', "brilliant");
stones[4] = new Diamond( "B4825", 0.3, "I1",   'D', "rose");
stones[5] = new Diamond( "A1844", 2.1, "VS2",  'D', "lozenge");
stones[6] = new Diamond( "A3747", 3.1, "SI2",  'W', "baguette");
stones[7] = new Diamond( "E6393", 2.3, "VS2",  'I', "brilliant");
stones[8] = new Diamond( "C5619", 2.8, "VVS1", 'E', "pear");
stones[9] = new Diamond( "E8348", 1.4, "VS2",  'G', "brilliant");
stones[10] = new Diamond( "D2381", 1.7, "I3",   'G', "brilliant");
stones[11] = new Diamond( "C9253", 1.3, "VS2",  'H', "baguette");
stones[12] = new Diamond( "G3459", 2.1, "VS2",  'H', "rose");
stones[13] = new Diamond( "B3598", 2.4, "VVS2", 'D', "pear");
stones[14] = new Diamond( "D9836", 2.8, "IF",   'E', "princess");
stones[15] = new Diamond( "E1046", 2.2, "FL",   'E', "rose");

Arrays.sort( stones );

for ( int j=0; j<stones.length; j++ )
  System.out.println( stones[j].toString() );

} }

} }

While doing compare with multiple params, we should keep returning 0 at the last and keep on comparing the params on priority. 在与多个参数进行比较时,我们应该最后返回0并继续比较优先级的参数。 Below is the code to sort on Carot, color and clarity. 以下是按字数,颜色和清晰度排序的代码。

You can add more conditions between color and clarity as per your requirement. 您可以根据需要在颜色和清晰度之间添加更多条件。

public int compareTo(Crawford_Diamond other) {
        if (getCarot() < other.getCarot()) {
            return 1;
        } else if (getCarot() > other.getCarot()) {
            return -1;
        }

        if (this.color < other.getColor()) {
            return 1;
        } else if (this.color > other.getColor()) {
            return -1;
        }

        if (this.clarity.compareTo(other.getClarity())<1) {
            return 1;
        } else if (this.clarity.compareTo(other.getClarity())>1) {
            return -1;
        }
        return 0;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM