java - CompareTo 预期元素错误

标签 java arrays string compareto

我有以下代码;目的是返回数组中按字母顺序排列的最小成员。

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/

相关文章:

java - 无法在 Excel 工作表中使用 POI 为空值插入数据

java - android gradle -- 编译两个纯java项目到dex

javascript - Angular $scope.$watch - 根据 ng-model/length 创建数组和总数

c - 索引超过 C 数组的末尾

java - MongoDB Java API 读取速度慢

java - 在 Cloud Datastore 中,如果所有仪表板都显示 'Okay",如何确定我违反了哪些配额

jquery if then 每个数组

c++ - 命名空间 std 中没有名为 stoi 的成员

java - 使用 Talend 的 FTP,只获取最新的文件?

c# - 为什么 C#/.NET 字符串以长度为前缀并以 null 结尾?