2014-02-24 4 views
0

Java에서 compareTo를 덮어 쓰려고하는데 다음과 같이 작동합니다. 각각 k 개의 문자열을 포함하는 두 개의 문자열 배열이 있습니다. compareTo 메소드는 각 배열의 k 번째 요소를 비교하면서 순서대로 단어를 검색합니다. 그런 다음 배열이 바로 정렬됩니다. 현재 가지고있는 코드는 다음과 같습니다. 그러나 제대로 작동하지 않습니다.Java Implementing Comparable

for-loop 외부에 return 문이 필요합니다. for-loop return 문 중 하나에 항상 도달하기 때문에이 return 문이 리턴해야하는 것이 확실하지 않습니다.

또한 continue을 올바르게 사용하고 있습니까?

public int compareTo(WordNgram wg) { 
    for (int k = 0; k < (this.myWords).length; k++) { 
     String temp1 = (this.myWords)[k]; 
     String temp2 = (wg.myWords)[k]; 
     int last = temp1.compareTo(temp2); 
     if (last == 0) { 
      continue; 
     } else { 
      return last; 
     } 
    } 
} 
+1

어떻게 제대로 작동하지 않습니까? 예외? 원하는대로 정렬하지 않습니까? – AntonH

+2

"* 제대로 작동하지 않습니다. *"는별로 도움이되지 않습니다. 왜 작동하지 않습니까? 어떻게 테스트합니까? [문제를 재현하는 단순하지만 완전한 예를 보여줄 수 있습니까?] (http://stackoverflow.com/help/mcve)? – assylias

+0

내가 처음 실행하는 첫 번째 문제는 for-loop 밖에서 return 문이 필요하다는 것입니다. for-loop return 문 중 하나에 항상 도달하기 때문에이 return 문이 리턴해야하는 것이 확실하지 않습니다. – user2904796

답변

0

당신은 같은 위치에있는 두 개의 문자열을 비교하려면 :

int last = temp1.compare(temp2); 
0

자바 컴파일러 위임 모든 엔드 포인트 return 문이 있어야합니다. 귀하의 경우에는 결국 0을 반환해야합니다. 따라서 두 배열 모두 완전히 동등한 문자열을 포함하고있을 때 호출자는 이들이 동일하다는 것을 알게됩니다.

0

1 분 동안 코드를보고 난 후 두 개의 정의되지 않은 상태, 즉 this.myWords.length0이고 두 단어가 동일하므로 컴파일러를 청취하기 시작해야합니다.

또한 개인적으로 입력에 대한 모든 가능성을 고려한 여러 메소드 종료점을 처리하는 것이 매우 어렵고 디버깅을 더 쉽게하고 결과를보다 예측 가능하게 만드는 단일 return 문을 삽입합니다. 예를 들어, 귀하의 경우에 0과 다른 경우 컬렉션에 compareTo의 결과를 수집하여 for 루프가 완료된 후 0 (빈 콜렉션) 또는 첫 번째 값이 0이면 컬렉션의 상태를 결정할 수 있습니다. 컬렉션에있는 모든 데이터가 반환 될 수 있습니다. "더 나은 결과를 모두 내십시오. compareTo0이 아니지만 그 결과가 0인데, 그렇지 않은 경우 비교 결과는 0입니다. 그렇지 않으면 비교 결과는 첫 번째입니다. 목록의 요소. "