Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java compareTo()方法抛出;此方法必须返回int";方法中返回int时出错_Java_Return Value_Return Type_Compareto - Fatal编程技术网

Java compareTo()方法抛出;此方法必须返回int";方法中返回int时出错

Java compareTo()方法抛出;此方法必须返回int";方法中返回int时出错,java,return-value,return-type,compareto,Java,Return Value,Return Type,Compareto,我正在为我的计算机科学课程做一项作业,要求我实现一个类似的接口 除了被告知它比较两个对象并返回小于、大于和等于之外,我们没有详细讨论过接口,但实际上就是这样,令人沮丧 我打算对它做更多的研究,但现在我发现我不明白为什么我的compareTo()方法的实现不起作用 Eclipse给了我一个错误,compareTo()必须返回一个int,但如果您注意到,我返回的是一个整数值。那么问题是什么呢 public int compareTo(Task taskToCompare) { if(this

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

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

我打算对它做更多的研究,但现在我发现我不明白为什么我的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;
    }
}
public int compareTo(任务比较){
if(this.complete&&tasktompare.isComplete()){
if(this.priority==taskToCompare.getPriority()){
返回0;
}
else if(this.prioritytasktompare.getPriority()){
返回1;
}
}else if(this.complete==true&&tasktompare.isComplete()==false){
返回-1;
}else if(this.complete==false&&tasktompare.isComplete()==true){
返回1;
}
}

如果返回类型为
int
,则必须返回
int
抛出一个异常。仅在不返回
的情况下退出该方法将导致编译器错误

如果您有
If-else-If
条件,则可能存在不调用任何块的情况。因此,您应该创建一个带有
return
else
语句

此外,如果多次调用该方法,
isComplete()
tasktompare.getPriority()
的结果可能会更改。编译器不知道您的逻辑是否阻止了这一点

例如,如果
complete
false
并且
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;
    }
}
public int compareTo(任务比较){
if(this.complete&&tasktompare.isComplete()){
if(this.priority==taskToCompare.getPriority()){
返回0;
}
else if(this.priority
如果
this.complete==false
taskToCompare.isComplete()==false


编译器正在抱怨,因为您没有涵盖所有情况。

根据您的方法签名,您必须返回一个
int
值。可能有这样一种情况,代码中提到的任何条件的计算结果都不是
true
,在这种情况下,您的方法将不会返回任何与方法签名相反的内容

一种简单的方法是将返回值赋给变量,并在方法退出之前返回变量。您可以按如下方式进行操作:

public int compareTo(Task taskToCompare) {
    int value = 0;
    if(this.complete && taskToCompare.isComplete()) {
        if(this.priority == taskToCompare.getPriority()) {
            value = 0;
        }
        else if(this.priority < taskToCompare.getPriority()){
            value = -1;
        }
        else if(this.priority > taskToCompare.getPriority()) {
            value = 1;
        }
    } else if(this.complete == true && taskToCompare.isComplete() == false) {
        value = -1;
    } else if(this.complete == false && taskToCompare.isComplete() == true) {
        value = 1;
    }
    return value;
}
public int compareTo(任务比较){
int值=0;
if(this.complete&&tasktompare.isComplete()){
if(this.priority==taskToCompare.getPriority()){
数值=0;
}
else if(this.prioritytasktompare.getPriority()){
数值=1;
}
}else if(this.complete==true&&tasktompare.isComplete()==false){
值=-1;
}else if(this.complete==false&&tasktompare.isComplete()==true){
数值=1;
}
返回值;
}
更紧凑的版本:

public int compareTo(Task taskToCompare) {
        int completeCompare = (this.complete == taskToCompare.complete) ? 0 : (this.complete  ? 1 : -1);
        if(completeCompare==0) {
            return  this.priority-taskToCompare.getPriority();
        }
        return completeCompare;
    }

this.complete==false&&tasktompare.isComplete()==false
在默认情况下没有返回(如果if语句失败),该怎么办。非常感谢您的意见,并让我明白。哦,好的,我明白了。非常感谢。
this.complete&&tasktompare.isComplete()
是否应注意两个任务是否都已完成?否,如果其中一个任务未完成,则不应注意。如果未完成任何任务,则不会调用
If
else If
块。另外,
isComplete()
方法可能会返回不同的结果,例如,如果在
if
else if
中执行,那么它可能会被另一个线程修改。我尝试实现:
(this.complete==true和&taskToCompare.isComplete()==true)|(this.complete==false和&taskToCompare.isComplete()==false)
Will(this.complete==false&&tasktompare.isComplete()==false)不能实现为true吗?另外,再次感谢您的帮助和宝贵时间。非常感谢。