2016-12-10 1 views
0

ArrayList를 확장하고 Comparable 인터페이스를 구현하는 generic 클래스 ComparableList <을 정의하여 ComparableList 유형의 두 객체를 compareTo 메소드를 사용하여 비교할 수 있습니다. compareTo는 사전 식 비교를 수행해야합니다. 다음은 내 코드입니다 :일반적인 comparable 배열 클래스를 정의하는 방법은 무엇입니까?

class ComparableList <T extends Comparable<T>> extends ArrayList implements Comparable<ComparableList>{ 
@Override 
    public int compareTo(ComparableList o){ 
     Iterator citer = this.iterator(); 
     Iterator oiter = o.iterator(); 
     while (citer.hasNext() && oiter.hasNext()){ 
      if (citer.next() > oiter.next()){ 
       return 1; 
      }else if (citer.next() < oiter.next()){ 
       return -1; 
      }else { 
       if (!citer.hasNext()){ 
        return -1; 
       } 
       if(!oiter.hasNext()){ 
        return 1; 
       } 
      } 
     } 
     return 0; 
} 

}

나는이 같은 오류 메시지를 가지고 :

TCL.java:11: error: bad operand types for binary operator '>' 
      if (citer.next() > oiter.next()){ 
          ^
first type: Object 
second type: Object 
TCL.java:13: error: bad operand types for binary operator '<' 
      }else if (citer.next() < oiter.next()){ 
           ^
first type: Object 
second type: Object 

나는 그것이 ComparableList 아니라 객체해야한다 생각합니다. 아무도 그 이유를 말해 줄 수 있습니까?

답변

1

Comparable.comapreTo()을 사용하여 개체를 비교해야합니다 (그 이유는 <T extends Comparable<T>입니다). 먼저 양쪽에 널 (NULL)이 있는지 확인해야합니다.

Iterator.next()을 호출 할 때마다 다음 요소로 반복되므로 한 루프 반복에서 두 번 호출하지 않아도됩니다. 루프 시작 부분에 항목을 저장 한 다음 저장된 값을 사용하십시오.

+0

코드를 'Iterator i = iter.next(), o = oiter.next();'로 수정했지만 컴파일러에서'객체를 Iterator로 변환 할 수 없습니다 '라고 표시했습니다. 여전히 ComparableList 유형이 아닌 것 같습니다. – Netjimmy

+0

이유 'iter.next()'가'Iterator'를 리턴 할 것이라고 기대 하시겠습니까? 다음 항목을 반환합니다. 즉, 'T'유형이 있습니다. –

+0

문제가 해결되었습니다. 감사! – Netjimmy

1

Comparable>< 연산자를 무시하지 않습니다 (아무 것도 할 수 없음). 당신의 T 구현 Comparable 때문에, compareTo를 사용하는도 next 번 반복 당 호출

int result = citer.next().compareTo(oiter.next()); 
if (result != 0) { 
    return result; 
} else { 
    if (citer.hasNext()) { 
     return -1; 
    } 
    if (oiter.hasNext()) { 
     return 1; 
    } 
} 

하는 것으로, next 반복자를 진행하기 때문이다.

+0

코드를 수정했지만'method compareTo (Object)'오류가 발생합니다. 여전히 Object 인 것처럼 보입니다. 원하는 ComparableList 유형이 아닙니다. – Netjimmy

1

이진 연산자는 (자바 연산자 오버로딩이없는)을 사용할 수 없습니다 확실히 당신의 ComparableList의 각 요소는 입력 T extends Comparable<T>이다, 그러나 Comparable를 확장하기 때문에, 당신은 < 교체로 사용할 수 compareTo이 및>. 대신 사용하십시오.

관련 문제