2014-02-24 5 views
0

Я пытаюсь перезаписать compareTo на Java, чтобы он работал следующим образом. Будут две строковые массивы, каждая из которых содержит k строк. Метод compareTo будет проходить через слова в порядке, сравнивая k-й элемент каждого массива. Затем массивы будут отсортированы таким образом. Код, который у меня есть в настоящее время, выглядит следующим образом, но он работает неправильно.Java Implementing Comparable

Мне нужна инструкция return вне цикла for. Я не уверен, что этот возвращаемый оператор должен вернуться, поскольку всегда будет достигнуто одно из операторов возврата for-loop.

Кроме того, я правильно использую здесь 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

Ну, первая проблема, с которой я столкнулся, заключается в том, что мне нужен оператор return вне цикла for. Я не уверен, что этот возвращаемый оператор должен вернуться, поскольку всегда будет достигнуто одно из операторов возврата for-loop. – user2904796

ответ

0

Вы хотите сравнить две строки в том же месте:

int last = temp1.compare(temp2); 
0

мандаты компилятор Java все конечные точки должны иметь оператор возврата. В вашем случае вы должны вернуть 0 в конце, поэтому, когда оба массива содержат полностью равные строки, вызывающий абонент будет знать, что они равны.

0

Вы должны начать слушать свой компилятор, потому что, посмотрев на ваш код в течение 1 минуты, я обнаружил два неопределенных состояния: this.myWords.length - 0, и два слова равны.

Кроме того, мне лично очень сложно обрабатывать точки выхода из нескольких методов со всеми возможными возможностями ввода и, скорее, вставлять один возвращаемый оператор, который облегчает отладку, а результаты более предсказуемы. Например, в вашем случае я собирал результаты compareTo в коллекции, если они отличаются от 0, так что после завершения цикла for вы можете решить в состоянии этой коллекции, если 0 (пустая коллекция) или первое значение в коллекции можно было бы вернуть. Мне нравится этот более формальный подход, потому что он заставляет вас думать о множестве, как в «Дайте мне все результаты сравнения, где compareTo приводит к чему-либо еще, кроме 0. Если этот список пуст, результат сравнения равен 0, в противном случае это первый элемент списка ".

Смежные вопросы