我有以下代码;目的是返回数组中按字母顺序排列的最小成员。
public String smallest() {
String smallest = "";
int i = 0;
while(log[i] != null) {
int nextIndex = i+1;
if(log[nextIndex] == null) {
break;
}
if(log[i].compareToIgnoreCase(log[nextIndex]) >0) {
smallest = log[nextIndex];
}
else {
smallest = log[i];
}
i++;
}
if(log[i].compareToIgnoreCase(smallest) <0) {
smallest = log[i];
}
return smallest;
}
当我运行测试程序时,其中两个测试失败,另外两个测试正常。第一个是成功测试的示例,后者是失败测试的示例。
public void test_3Elements_smallest_in_middle() {
strLog.insert("string 2"); strLog.insert("string 1");
strLog.insert("string 3");
assertEquals(strLog.smallest(), "string 1");
}
public void test_3Elements_smallest_at_beginning() {
strLog.insert("string 1"); strLog.insert("string 2");
strLog.insert("string 3");
assertEquals(strLog.smallest(), "string 1");
}
我到底能做些什么来解决这个问题?更具体地说,对于后一个,也就是失败的那个,它给了我一个错误,它需要 string[2],但它是 string[1]。这让我很困惑;如果它可以选出数组中间最小的,为什么不能选出开头最小的呢?
最佳答案
当这个单行解决方案可以完成这项工作时,您似乎使事情变得过于复杂:
return Collections.min(Arrays.asList(log), String.CASE_INSENSITIVE_ORDER);
关于java - CompareTo 预期元素错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883359/