JavaのcompareToメソッドの初心者レベル

Kicsi7:

私は、私はあなたが学生のネプチューンコード(文字列nep_c)とあなたが受験(int型point_num)で達成したポイント数を保存Studentクラスを作成する必要があり割り当てを持っています。次の表に従ってスコアの関数として試験に得られたチケットを返すパブリックINTのgetMark()メソッドを準備します:

  • 100〜> 5 90-。
  • 90と80との間の - > 4。
  • 80〜70 - > 3
  • 70〜60 - > 2
  • <60 - > 1

クラスはComparableインタフェースとのcompareTo()メソッドネプチューンコードに基づいてソート学生を実装します。その中に、マークの数であなたが得ます。残念ながら、私はcomperTo方法を理解していません。あなたは、私が正しいコードを書くことができますどのように私を助けることができますか?

public class Student implements Comparable{

private String nep_c;
private int point_num;
private int Mark;

public Student(int point_num, String nep_c) {
    this.point_num = 65;
    this.nep_c= "AAA1BB1";
}

public int getMark(){
    if (point_num <= 100 && point_num > 90)
    Mark = 5;
    else if (point_num <= 90 && point_num > 80)
    Mark = 4;
    else if (point_num <= 80 && point_num > 70)
    Mark = 3;
    else if (point_num <= 70 && point_num > 60)
    Mark = 2;
    else if (point_num <= 60)
    Mark = 1;
    else{
        return 0;
    }
    return Mark;
}

public String getNep_c(){
    return nep_c;
}

public int getPoint_num(){
    return point_num;
}

@Override
public int compareTo (Object o){
    return ???;
}

}

エリオットの新鮮:

ネプチューンコードに基づいて学生を並べ替えます

二つの部分。パート1、変更

implements Comparable

implements Comparable<Student>

その後

@Override
public int compareTo(Student o) {
    return this.nep_c.compareTo(o.nep_c);
}

しかし、あなたはその後、言うあなたが得るマークの数で、その中に。ので、おそらくあなたが本当にしたいです

@Override
public int compareTo(Student o) {
    return Integer.compare(getMark(), o.getMark());
}

あなたはタイブレーカとしてネプチューンコード、および使用マーク(S)でソートすることを意味なら、あなたのような何かを行うことができます

int c = this.nep_c.compareTo(o.nep_c);
if (c != 0) {
    return c;
}
return Integer.compare(getMark(), o.getMark());

または、Javaで8+、使用するComparator.comparingように

return Comparator.comparing(Student::getNep_c)
        .thenComparingInt(Student::getMark).compare(this, o);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=177262&siteId=1