2013-11-08 4 views
0

Я пытаюсь использовать сопоставимый интерфейс для сортировки массива. Метод compareTo() написан так, что алмазы упорядочиваются сначала каротом, затем по ясности или по цвету, в зависимости от того, что лучше для конкретного алмаза. Так как есть 23 марки цвета, но только 11 классов ясности, рассмотрите первые два цветовых класса как равные по степени первого сорта ясности, следующие два цвета, равные по степени второму классу ясности, и так далее , Я не уверен, как сравнить цвет с ясностью, так как одна строка, а другая - символ. Вот что я до сих пор.Вопросы, связанные с сопоставимым интерфейсом

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];

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

}

}

ответ

0

Хотя делать сравнение с несколькими Params, мы должны постоянно возвращаться 0 в последний и продолжайте сравнение Params приоритета. Ниже приведен код для сортировки по Каро, цвета и ясности.

Вы можете добавить дополнительные условия между цветом и четкостью согласно вашему требованию.

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; 
    } 
+0

Проблема, с которой я столкнулась, заключается в попытке сравнить ясность, которая является строкой для цвета, который является символом. Мне нужно определить, что ясность «FL» равна по значению цвету «D» или «E», ясность «IF» равна цвету «F» или «G» и т. Д., Так как есть 23 цвета типов и только 11 типов ясности. –

Смежные вопросы