728x90
반응형
데이터 클래스에 Comparable을 implement 해서 정렬하던 도중 발생한 오류이다.
public static class Student implements Comparable<Student> {
int gender;
int grade;
public Student(int gender, int grade) {
this.gender = gender;
this.grade = grade;
}
@Override
public int compareTo(Student o) {
if (this.gender > o.gender) return 1;
else if (this.gender == o.gender) {
if (this.grade > o.grade) return 1;
}
return -1;
}
}
문제가 발생한 코드인데, 위의 compareTo에서 모든 조건에 대해서 반환값을 지정해주지 않으면 정렬에 있어서 애매모호한 상황이 발생하여 일어나는 오류라고 한다.
예를 들어서, A > B 이고 B > C이면 A > C를 만족하도록 정렬되어야 하는데 이러한 상황같은 때에 정렬 조건이 비었거나 0을 리턴하고 있어서 정렬하기 애매모호해지는 상황에 일어난다고 한다.
public static class Student implements Comparable<Student> {
int gender;
int grade;
public Student(int gender, int grade) {
this.gender = gender;
this.grade = grade;
}
@Override
public int compareTo(Student o) {
if (this.gender > o.gender) return 1;
else if (this.gender == o.gender && this.grade > o.grade) {
return 1;
} else if (this.gender == o.gender && this.grade < o.grade) {
return -1;
} else if (this.gender < o.gender) return -1;
return -1;
}
}
아래와 같이 코드를 수정하여서 에러를 해결하였다.
728x90
반응형