citizen   6년 전

배열의 크기를 벗어나는 경우가 유력해보이는데,

while문이 배열의 크기-1까지만 작동하고 while문 밖에서

배열이 쓰이는 일이 없으니 배열 크기문제도 사실상 아니라고

추측을 합니다만..

에러의 원인이 뭘까요?

bupjae   6년 전

Comparator를 잘못 작성하셨습니다.


compare(a, a)는 항상 0을 반환할 수 있도록 하셔야 합니다.

citizen   6년 전

Comparator를 사용하는 문제는 여러 개 풀어봤는데

그 동안 0을 리턴하지 않아도 통과가 되었습니다.

이 문제만 유독 0을 리턴하지 않으면 런타임에러가 생기는 이유가 있나요?

bupjae   6년 전

sort 함수가 내던질 수 있는 예외 목록에

IllegalArgumentException - (optional) if the comparator is found to violate the Comparator contract

라고 명시되어 있습니다.


sort 함수는 Comparator 가 잘못 되었는지 확인을 "적극적"으로 하지는 않습니다. 다만 , 입력 데이터에 따라 sort 가 정렬 알고리즘을 실행하는 도중에 Comparator 가 잘못되었다는 "증거"를 발견할 수 있고, 이 때 저 예외를 내뱉습니다. 정렬 알고리즘이 그런 증거를 발견하지 못했다면 예외 없이 (프로그래머가 의도한 것일 수도 있고, 그렇지 않을 수도 있는) 정렬 결과를 반환합니다.



댓글을 작성하려면 로그인해야 합니다.