메이쁘

[JAVA] java.lang.IllegalArgumentException: Comparison method violates its general contract! 에러 해결 본문

Language/JAVA

[JAVA] java.lang.IllegalArgumentException: Comparison method violates its general contract! 에러 해결

메이쁘 2020. 4. 5. 02:54

 

 

 

오우...

 

보석 도둑 문제를 풀다가 발생한 오류.

 

앞으로 코딩할 때 반드시 지켜야겠다고 다짐했다.

 

 

 

저 오류는

 

말 그대로 비교가 너무 모호하다는 뜻이다.

 

 

즉,

Comparable로 값을 비교하는데

이게 같을 때랑 다를 때랑 어떻게 정렬할 지 판단하기 애매하다는 것이다.

 

참고로 저 오류가 났을 때 내 코드는

@Override
	public int compareTo(Jewelry o) {
		// Comparison method violates its general contract! 에러 발생.
		// 모호해서 생김.
		// < 말고 <= 해주면 
		if(this.weight < o.weight) {
			return -1;
		}
		else {
			return 1;
		}
	}

 

이랬다.

 

 

주석에 적어놨듯이

 

this.weight 와 o.weight 가 같을 때 어떻게 정렬해줄지 막연하게 else로만 했기 때문에

 

너무 많은 데이터를 정렬하게 되면

 

헷갈린다는 거다...

 

 

저기서 < 말고 <= 를 넣으니

오류가 싹 사라졌다.

 

 

 

감사합니다.

 

 

 

참고

https://118k.tistory.com/291

Comments