尽管在方法中返回 int,compareTo() 方法仍抛出“此方法必须返回 int”错误

Gai*_*erd 2 java return-type return-value compareto

我正在为我的计算机科学课程做一项作业,要求我实现一个 Comparable 接口。

我们没有详细讨论接口,只是被告知它比较两个对象并返回小于、大于和等于,但实际上就是这样,这令人沮丧。

我打算对它做更多的研究,但现在我发现我很困惑为什么我的 compareTo() 方法的实现不起作用。

Eclipse 给我一个错误,compareTo() 必须返回一个int,但如果您注意到,我正在返回一个整数值。那么可能是什么问题呢?

public int compareTo(Task taskToCompare) {
    if(this.complete && taskToCompare.isComplete()) {
        if(this.priority == taskToCompare.getPriority()) {
            return 0;
        }
        else if(this.priority < taskToCompare.getPriority()){
            return -1;
        }
        else if(this.priority > taskToCompare.getPriority()) {
            return 1;
        }
    } else if(this.complete == true && taskToCompare.isComplete() == false) {
        return -1;
    } else if(this.complete == false && taskToCompare.isComplete() == true) {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

dan*_*1st 9

如果返回类型是int,则必须返回一个intthrow异常。仅在没有 a 的情况下退出方法return将导致编译器错误。

如果您if-else-if有条件,可能会出现没有调用任何块的情况。因此,您应该创建一个else带有return.

此外,如果多次调用该方法,isComplete()和的结果taskToCompare.getPriority()可能会发生变化。编译器不知道您的逻辑是否会阻止这种情况。

例如,如果completefalse并且isComplete()也返回,就是这种情况false。和以前一样,编译器不知道您的逻辑是否会阻止这种情况。

我想你想要这样的东西:

public int compareTo(Task taskToCompare) {
    if(this.complete && taskToCompare.isComplete()) {
        if(this.priority == taskToCompare.getPriority()) {
            return 0;
        }
        else if(this.priority < taskToCompare.getPriority()){
            return -1;
        }
        else{
            return 1;
        }
    } else if(this.complete == true && taskToCompare.isComplete() == false) {
        return -1;
    } else if(this.complete == false && taskToCompare.isComplete() == true) {
        return 1;
    }else{
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)