2014-12-06 2 views
0

java에서 compareTo 메소드에 대해 질문이 있습니다. 따라서이 compareTo 메소드는 CarOwner 객체를 비교하며, 호출 객체가 인수를 비교하여 시간순으로 더 빠르면 -1을 반환합니다. 호출 객체가 인수 1과 비교하여 시간순으로 나중에있는 경우 호출 객체와 인수가 전달 된 인수가 CarOwner 객체가 아닌 경우 (this를 결정하기 위해 instanceof 또는 getClass 사용) 또는 null 인 경우 -1을 반환합니다.java - compareTo 메소드

내가이 코드를 생각해 냈지만 작동하지 않는 것처럼 보이지만 아무도 제안을하지 못했습니까? getYear는()와 속하는 getMonth()을 비교 객체를 반환하는 경우

public int compareTo(Object o) 
{ 
    if ((o != null) && (o instanceof CarOwner)) 
    { 
     CarOwner otherOwner = (CarOwner) o; 
     if (otherOwner.compareTo(getYear()) > 0) 
      return -1; 
     else if (otherOwner.compareTo(getYear()) < 0) 
      return 1; 
     else if (otherOwner.equals(getYear())) 
      if (otherOwner.compareTo(getMonth()) > 0) 
       return -1; 
      else if (otherOwner.compareTo(getMonth()) < 0) 
       return 1; 
      else if (otherOwner.equals(getMonth())) 
       return 0; 
    } 
    return -1; 
} 
+0

첫째, 제네릭을 사용하는 것이 좋습니다 . 클래스 선언을'public class CarOwner implements implements comparable '으로 변경하십시오. 그런 다음'compareTo' 메소드를'public int compareTo (CarOwner otherOwner)'로 변경해야합니다. – Multithreader

답변

0

이 작동해야

public int compareTo(Object o) 
{ 
    if ((o != null) && (o instanceof CarOwner)) 
    { 
     CarOwner otherOwner = (CarOwner) o; 
     int result = otherOwner.getYear().compareTo(getYear()); 
     if (result != 0) 
      return result; 
     return otherOwner.getMonth().compareTo(getMonth()); 
    } 
    return -1; 
} 

getYear는()와 속하는 getMonth()가 다음 int를 반환하는 경우 :

public int compareTo(Object o) 
{ 
    if ((o != null) && (o instanceof CarOwner)) 
    { 
     CarOwner otherOwner = (CarOwner) o; 
     if (otherOwner.getYear() > getYear()) 
      return -1 
     else if (otherOwner.getYear() < getYear()) 
      return 1 
     else if (otherOwner.getMonth() > getMonth()) 
      return -1 
     else if (otherOwner.getMonth() < getMonth()) 
      return 1; 
     else 
      return 0; 
    } 
    return -1; 
} 
+0

이것을 컴파일하려했으나 int를 참조 할 수 없다고합니다. – corkiiunranked

+0

이 함수는 CarOwner 클래스의 일부입니까? – Dmitry

+0

예. public 클래스 CarOwner는 Comparable – corkiiunranked

0

하는 경우를 당신은 어떤 CarOwner에게이 방법을 적용 할 것입니다 :

  1. 예, CarOwner의 인스턴스입니다. 우리는 당신의 블록에 들어간다.
  2. 하지만 otherOwner.compareTo를 호출하면 정수 또는 문자열이라고 가정하는 "연도"또는 "월"을 전달하게됩니다.
  3. 그러면 otherOwner의 compareTo 메소드로 이동합니다. "Year"또는 "Month"는 CarOwner의 인스턴스가 아니며 항상 -1을 반환합니다.

그렇다면 "Year"또는 "Month"를 otherOwner의 "Year"또는 "Month"와 비교하여 결과를 반환하십시오.

0

서로 다른 필드를 비교 및 ​​연도 필드가 동일한 경우 더 깊이 파고으로, 나는 전체 otherOwner 인스턴스이 인스턴스의 다음

int oy=otherOwner.getYear(); 
int ty=this.getYear(); 
int om=otherOwner.getMonth(); 
int tm=this.getMonth(); 

if(oy==ty){ 
    return om-tm; 
}else{ 
    return oy-ty; 
} 
1

당신은 비교되는 특성을 제안한다. otherOwner의 속성과 비교해야합니다. 예를 들어

otherOwner.getYear().compareTo(getYear())

0

대신 객체의 당신의 compareTo 메소드에 대한 그 사용 CarOwner 후 클래스 (Comparable<CarOwner>)에 Compareable 인터페이스를 구현 (int compareTo(CarOwner otherOwner))