2016-05-31 14 views
3

私はComparableインターフェースを実装するstudentオブジェクトを持っています。TreeSetは2つ以上の項目(オブジェクト)を追加していません

class Student implements Comparable<Student>{ 
    String rollNo; 
    double internal; 
    double external; 
    Student(String rollNo, double internal, double external){ 
     this.rollNo = rollNo; 
     this.internal = internal; 
     this.external = external; 
    } 
    public int compareTo(Student otherStudent){ 
     return (this.external < otherStudent.external) ? -1 : 
      (this.external > otherStudent.external) ? 0 : 1; 
    } 
} 

私は、学生のリストからオブジェクトのセットを追加しようとしています。次のように入力リストの抜粋である:

U4CSE11150,25,24.5 
U4CSE11167,4,13 
U4CSE12502,23,34.5 
U4CSE13001,27,44.5 
U4CSE13002,26,30 
U4CSE13003,44,62.5 
U4CSE13005,32,30.5 
U4CSE13006,24,31 
U4CSE13007,27,41 
U4CSE13008,34,47 
... 

Iは、whileループ内学生オブジェクトを作成TreeSetstudentsに追加し、オブジェクトの3番目の値と共にTreesetのサイズを印刷しています(すなわち外部マーク)。以下はコードです。

while((line = br.readLine()) != null){ 
       String[] elements = line.split(","); 
       rollNo = elements[0]; 
       internal = Double.parseDouble(elements[1]); 
       external = Double.parseDouble(elements[2]); 

       Student s = new Student(rollNo, internal, external); 
       students.add(s); 
       System.out.println("Size: " + students.size() + " Mark: " 
+ s.external); 
       } 

しかし、プログラムを実行すると、次のような出力が得られます。最初の2つのオブジェクトだけを追加しています。

Size: 1 Mark: 24.5 
Size: 2 Mark: 13.0 
Size: 2 Mark: 34.5 
Size: 2 Mark: 44.5 
Size: 2 Mark: 30.0 
Size: 2 Mark: 62.5 
Size: 2 Mark: 30.5 
Size: 2 Mark: 31.0 
Size: 2 Mark: 41.0 

誰でも私を助けることができますか?前もって感謝します。

+0

あなたは、これはあなたの完全なコードであることを確認している...あなたはここで何かを見逃しているように...また、あなたは完全なTreeSetのを印刷するとき何を得る私たちを見ることができそうですか? – qwerty

答えて

3

compareToメソッドが無効です。比較された値が等しくない場合は0を返します。それは次のようになります。

public int compareTo(Student otherStudent){ 
    return (this.external < otherStudent.external) ? -1 : 
     (this.external > otherStudent.external) ? 1 : 0; 
} 
+0

はい。それは間違いでした。ありがとう –

関連する問題