강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

HY_NGK님의 프로필 이미지
HY_NGK

작성한 질문수

김영한의 실전 자바 - 중급 2편

문제와 풀이

compareTo

작성

·

24

0

[질문 내용]

처음 문제를 풀떄
Card 클래스에 compareTo 오버라이딩을 @Override public int compareTo(Card o) { if(number != o.getNumber()){ return this.number - o.number; } return shape.compareTo(o.getShape()); }

위 코드처럼 작성했는데 숫자가 낮은 카드 먼저 안 나올때가 있는데 잘못 작성한걸까요?

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 강민호님.

compareTo 메소드의 구현에 대해 질문을 주셨군요. 작성해 주신 코드를 보면 숫자와 모양을 기준으로 두 개의 필드를 비교하고 있습니다. 주어진 코드는 비교 로직이 잘못 설정된 것은 아닙니다. 그러나 compareTo 메소드의 반환 값에 따라 정렬의 방향이 결정됩니다. 다음 몇 가지를 확인해 보시면 좋을 것 같습니다:

  1. 숫자 비교: this.number - o.number는 두 숫자의 차이를 제공하며, 이 결과가 양수일 경우 this.number가 더 큰 것으로 간주됩니다. 음수라면 this.number가 더 작은 것으로 정렬됩니다.

  2. 모양 비교: 만약 숫자가 같은 경우, shape.compareTo(o.getShape())을 통해 모양을 사전순으로 비교하게 됩니다. compareTo 메소드는 주로 사전식 및 오름차순 정렬을 위해 사용하는데, 이러한 정렬 순서가 기대하는 것과 다를 수 있습니다.

만약 숫자가 낮은 카드가 우선적으로 나와야 하는데, 그렇지 않을 경우, 입출력에서 사용되는 데이터 또는 다른 외부 요인이 영향을 줄 수 있습니다. 또한, Card 클래스에서 compareTo 메소드 외에 다른 정렬 로직이 추가로 있는지 확인해 보시기 바랍니다.

관련된 질문과 유사한 사례를 다루는 게시물을 아래에 링크합니다. 이 링크를 통해 유사한 질문들을 참고해 보시고, 코드 구현에 대한 이해를 높이세요:

  • comparable 질문 - 자바 compareTo 메소드의 사용 방법과 내부 정렬 알고리즘에 대한 설명이 포함될 수 있습니다.

제가 제공한 정보가 도움이 되길 바라며, 아직 해결되지 않은 부분이 있다면 강의의 내용과 함께 비교하면서 점검해 보시길 권장드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

HY_NGK님의 프로필 이미지
HY_NGK

작성한 질문수

질문하기