سؤال

أحاول استخدام الواجهة المماثلة لفرز صفيف. تتم كتابة Method Compareto () بحيث يتم طلب الماس أولاً بواسطة CAROT ، ثم بالوضوح أو اللون ، أيهما أفضل للماس المعين. نظرًا لوجود 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 في النهاية والاستمرار في مقارنة المعلمات ذات الأولوية. فيما يلي الرمز الذي يجب فرزه على الكارو واللون والوضوح.

يمكنك إضافة المزيد من الشروط بين اللون والوضوح وفقًا لمتطلباتك.

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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top