public class Student implements Comparable { //implements -> Comparableインターフェース継承 private int id; // 学籍番号 private String name; // 氏名 private int grade; // 学年 public Student(int id, int grade, String name) { this.id = id; this.grade = grade; this.name = name; } public String toString() { return id + "," + grade + "," + name; } @Override public int compareTo(Object o) { //object抽象的、曖昧 Student st = (Student) o; // TODO: // thisとstを比較し... // 1.thisの方が学年が下ならば、負の整数(例えば-1)を返す。 if(this.grade < st.grade ) return -1; // 2.thisの方が学年が上ならば、正の整数(例えば1)を返す。 if(this.grade < st.grade ) return 1; // 3.学年が同じでthisの方が学籍番号の数値が小さければ、負の整数を返す。 if(this.grade == st.grade && this.id < st.id) return -2; // 4.学年が同じでthisの方が学籍番号の数値が大きければ、正の整数を返す。 if(this.grade == st.grade && this.id > st.id) return 2; // 5.それ以外なら 0 を返す。 return 0; } }
import java.util.Arrays; public class StudentList { public static void main(String[] args) { // 学生データを準備 Student[] list = new Student[] { // 2年生 new Student(10190003, 2, "Alice"), new Student(10190004, 2, "Bob"), // 1年生 new Student(10200001, 1, "Carol"), new Student(10200002, 1, "Dave"), // 5年生 new Student(21200005, 5, "Eve"), new Student(21200006, 5, "Frank") }; // list配列の添え字0以上6未満の範囲を並び替える Arrays.sort(list, 0, 6); // 並び替えた結果を順に出力する for (int i = 0; i < list.length; i++) { System.out.println(list[i]); } } }
student配列を学年の低い学生から学年の高い学生に、同じ学年であれば学籍番号の数値の小さい学生から大きい学生に、並ぶようにしたいです。
エラー文
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to comptest.Student
at comptest.Student.compareTo(Student.java:29)
at comptest.Student.<init>(Student.java:19)
at comptest.StudentList.main(StudentList.java:15)
実行結果をこうしたい
10200001,1,Carol
10200002,1,Dave
10190003,2,Alice
10190004,2,Bob
21200005,5,Eve
21200006,5,Frank
public String toString()を使うと思うのですが、どこで使うのかもわかりません。
どういうプロセスで書けばよいのでしょうか。
Comparableはあとで追加します。
Comparable対応にする際に必要となるcompareToメソッドを記述しています
回答2件
あなたの回答
tips
プレビュー