2014-02-24 98 views
0

我想覆盖Java中的compareTo,它的工作原理如下。将会有两个包含k个字符串的字符串数组。 compareTo方法将依次遍历单词,比较每个数组的第k个元素。然后数组将被如此排序。我目前的代码如下,但它不能正常工作。Java实现可比较

我需要for循环外的return语句。我不确定这个return语句应该返回什么,因为总是会有一个for循环返回语句。

另外,我在这里正确使用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循环外的return语句。我不确定这个return语句应该返回什么,因为总是会有一个for循环返回语句。 – user2904796

回答

0

你想两个字符串在同一位置比较:

int last = temp1.compare(temp2); 
0

Java编译器任务的所有端点必须有一个return语句。在你的情况下,你必须在结束时返回0,所以当两个数组包含完全相同的字符串时,调用者将知道它们是平等的。

0

你应该开始聆听你的编译器,因为在查看你的代码1分钟后,我发现了两个未定义的状态:this.myWords.length0,这两个字是相等的。

另外,我个人觉得很难处理多种方法的退出点,并考虑所有输入的可能性,而是插入单个返回语句,这使得调试更容易,结果更易于预测。例如,在我的例子中,如果与0不同,我会在集合中收集compareTo的结果,以便在for循环结束后,您可以在此集合的状态下决定是否0(空集合)或第一个值在集合中可以返回。我喜欢这种更正式的方法,因为它强制你想像集合一样,如“给我比较结果,其中compareTo结果除0之外的任何结果。如果此列表为空,比较结果为0,否则它是第一个列表中的元素“。