Java - 修改后的 compareTo 方法说它需要返回一个 int,但它应该返回一个

标签 java compareto

我现在正在学习基本的 Java,我的代码有一个我无法弄清楚的问题。这基本上就是标题所说的。我的 Java 编译器告诉我我的自定义 compareTo 方法有错误,说它需要返回一个 int。问题是,据我所知,它正在返回一个 int。但它仍然给我一个错误。有人可以在我的代码中指出错误吗?而且我已经在类里面实现了 Comparable。这是我的方法:

public int compareTo(Homework other) {
    if (getDaysLate() < other.getDaysLate()) {
        return -1;
    } else if ((dateSubmitted == other.dateSubmitted)
            && (files.compareTo(other.files) == -1)) {
        return -1;
    } else if ((dateSubmitted == other.dateSubmitted)
            && (files == other.files)) {
        if (name.compareTo(other.name) == -1) {
            return -1;
        } else if (name.compareTo(other.name) == 1) {
            return 1;
        } else if (name.compareTo(other.name) == 0) {
            return 0;
        }
    } else {
        return 0;
    }
}

最佳答案

第三个 else 中有一条路径不返回任何内容。

 else if ((dateSubmitted == other.dateSubmitted) && (files == other.files)) {
    if (name.compareTo(other.name) == -1) {
      return -1;
    }
    else if (name.compareTo(other.name) == 1) {
      return 1;
    }
    else if (name.compareTo(other.name) == 0) {
      return 0;
    } else return ...
}

顺便说一句,我不确定我是否遵循了您的实现逻辑,因为如果 dateSubmitted != other.dateSubmitted,您似乎返回了 0。 compareTo 也应该是反对称的(即 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))),但是你的实现是不是。

关于Java - 修改后的 compareTo 方法说它需要返回一个 int,但它应该返回一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15288191/

相关文章:

java - 想要使用 Java 和 Flex 从数据库中提取数据

java - 我怎样才能从一个大文件中读取并以快速的方式将它插入到数据库中

java - 使用Seekbar调整EditText

java - 如何按多个类别对 Arraylist 进行排序

java - 为字符链接列表编写一个compareTo()方法

java - 在异步调用中更改变量

java - 如何用基元替换 Integer 对象

java - String.compareTo方法进行比较

c# - CompareTo 的问题

java - java.util.concurrent.Delayed 真的迫使我违反 equals/compareTo 一致性吗?