알고리즘을 풀면서 자꾸 같은 로직인데 런타임 에러가 발생했다.
특히 custom으로 Compare 로직을 짤때 해당 에러가 발생했다.
이건 에러가 난 코드이다.
if(Integer.parseInt(my+other)>Integer.parseInt(other+my))
return -1;
else
return 1;
밑에 코드는 에러가 나지 않은 코드이다.
if(Integer.parseInt(my+other)>Integer.parseInt(other+my))
return -1;
else if(Integer.parseInt(my+other)<Integer.parseInt(other+my))
return 1;
else return 0;
찾아보니
https://www.acmicpc.net/board/view/10721
좋은답변이 있었다.
"sort 함수는 Comparator 가 잘못 되었는지 확인을 "적극적"으로 하지는 않습니다. 다만 , 입력 데이터에 따라 sort 가 정렬 알고리즘을 실행하는 도중에 Comparator 가 잘못되었다는 "증거"를 발견할 수 있고, 이 때 저 예외를 내뱉습니다. 정렬 알고리즘이 그런 증거를 발견하지 못했다면 예외 없이 (프로그래머가 의도한 것일 수도 있고, 그렇지 않을 수도 있는) 정렬 결과를 반환합니다"
정확히 이해는 못하였지만 컴파일에서는 에러를 확인하지 않지만 런타임시 (sort 알고리즘 작동시) 0을 반환하는게 정상인데 해당 로직이 없는것을 검사한다는것 같다.
다음부터는
return a-b; 같은 형태로 써야겠다
꼭 기억하고자 블로그에 작성