2013-04-19 2 views
0

아래 compareTo 메서드를 사용하여 배열을 정렬하려고합니다. 내가하는 일을 정확하게 이해하는 데 어려움을 겪고 있습니다. 나는 또한 Object arg가 참조하고있는 것을 얻지 못한다. 아무도 나에게 정확히이 방법이 무엇이며 어떻게 작동하는지 설명 할 수 있습니까? 다음 코드는 내가 처음 '반환'실제로 반환해야한다고 가정거야, 첫째 ...와compareTo 메서드 : Object arg?

public int compareTo (Object arg) 
{ 
    if (salary > ((Employee)arg).salary) 
     return; 
    else if (salary == ((Employee)arg).salary) 
     return 0: 
    else 
     return -1; 
} 
+0

코드 블록에 코드가 추가되도록 코드 앞에 줄을 추가하십시오 :) –

+0

thanks! 죄송합니다.이 – Mike

+0

에서 새롭습니다. 직원의 급여 (또는 그 하위 클래스)와 급여 인스턴스 변수를 비교하는 것 같습니다. – Ivo

답변

1

첫째을 작성할 수 있습니다, 오류가있어 - 첫번째로 복귀 return 1을해야합니다.

public int compareTo (Object arg) 
{ 
    if (salary > ((Employee)arg).salary) 
     return 1; 
    else if (salary == ((Employee)arg).salary) 
     return 0: 
    else 
     return -1; 
} 

이제 코드를 살펴 보겠습니다.

주의해야 할 첫 번째 일은 우리가 계약에 코딩되어 있다는 것입니다 - 특히, 당신이 필요로하는 Comparable 인터페이스, arg를 호출 한 매개 변수를 사용하는 방법 compareTo을하고, int를 반환합니다. thisarg보다 작 으면 int는 음수 여야하며 이 arg보다 크고 thisarg이면 0입니다.

염두에두고 코딩을 시작합니다. Employee 클래스를 비교할 수있는 유일한 방법은 다른 Employees입니다. 따라서 arg 개체를 Employee으로 캐스팅합니다. 그것이 하나가 아니면 예외가 발생합니다.

그런 다음 급여와 급여를 단순히 비교하고 두 명의 직원이 주문하는 방식에 따라 1 또는 0 또는 -1을 반환합니다. 이를 통해 직원은 PriorityQueue 컨테이너에 올바른 순서로 나타나는 것과 같은 목적으로 자연 순서 지정 및 정렬이 가능합니다.

0

작업 한 것입니다 1.

무엇이가를 반환하고있다 주문. 1을 반환하면 'arg'객체가 현재 객체 이후에 있어야합니다 (즉, 더 높은 인덱스를 가져야 함). 비슷하게, 값 -1은 BEFORE가되어야한다는 것을 나타내며 값 0은 그것이 같고 순서가 중요하지 않음을 의미합니다 (다른 정렬 알고리즘은이 요소와 다르게 동작 할 수 있지만 stable sorting).

1

compareToargthis을 비교, 그래서 arg는 당신이 비교하는 것입니다. 효과적으로이 코드는 직원들의 급여를 비교하여 직원들을 비교하는 것으로 보입니다. return;을 말한다 가정 라인이 return 1;로 의미, 코드가

public int compareTo (Object arg) 
{ 
    Integer thisSalary = this.salary; 
    Integer otherSalary = ((Employee) arg).salary; 
    return thisSalary.compareTo(otherSalary); 
} 
0

Object 인수는 compareTo가 Employee 객체가 아닌 모든 객체를 수신한다는 것을 의미합니다. 다른 클래스의 두 객체를 비교하려는 경우 유용 할 수 있습니다 (클래스 Person과 클래스 Dog를 비교하고 둘 다 동일한 가중치를 갖는 경우 true를 반환한다고 가정).

이 특정 경우에 arg를 Employee로 변환하면 특정 객체를 Employee 인스턴스로 취급하게됩니다.

코드 앞에 "if (instanceof (Employee))"를 추가하는 것이 좋습니다. arg가 실제 Employee 인 경우에만 코드를 실행하게됩니다. (예 : if (instanceof (Dog))가 Person을 Dog로 변환하려고 시도하는 것을 방지합니다. 호환되지 않는 유형을 형변환하려고 시도하면 예외가 발생하므로 유용합니다.

0

나는 또한 항목의 배열을 정렬하려면

를 참조 어떤 객체 인수하지 않는, 그 중 하나를 잡고 다른 항목과 비교 할 수 있어야합니다 . 항목을 완전히 정렬하려면 많은 비교가 필요합니다. compareTo()는 배열의 모든 항목이 속한 클래스에서 정의하는 메서드입니다. compareTo() 메서드를 사용하면 정렬 루틴에서 배열의 항목 하나를 잡고 해당 항목에 대해 compareTo()를 호출 할 수 있습니다. compareTo() 함수의 인수는 배열의 다른 항목입니다. compareTo() 메서드의 반환 값은 정렬 루틴에 두 항목을 정렬하는 방법을 알려줍니다.

관련 문제