java - compareTo() 方法抛出“此方法必须返回 int”错误,尽管在方法中返回 int
问题描述
我正在为我的计算机科学课程做作业,要求我实现一个 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;
}
}
解决方案
如果返回类型是int
,则必须返回一个int
或throw
异常。只退出没有 a 的方法return
将导致编译器错误。
如果您if-else-if
有条件,可能会出现没有调用任何块的情况。因此,您应该创建一个else
带有return
.
此外,如果您多次调用该方法, isComplete()
and的结果可能会发生变化。taskToCompare.getPriority()
编译器不知道您的逻辑是否阻止了这种情况。
例如,如果complete
isfalse
并且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;
}
}
推荐阅读
- spring-boot - maven:替换传递依赖版本
- python - 如何使用 Python pandas 在 csv 文件中将数据插入 15 分钟的时间间隔?
- c# - 使用 DGV Cell 绘画。在单元格中输入数字,确定。然后我移动到另一个单元格并用不同的数字重复,好的,但第一个数字消失了
- ethereum - ERC-721:如何确定地址拥有哪些令牌
- javascript - 将 JSON 数据的问题附加到 HTML 表
- amazon-web-services - 尝试配置 aws s3 触发器以在两者位于同一区域但不同的 aws 帐户时调用 lambda 函数
- android - 登录屏幕没有弹出
- sql - 从数据库中随机选择一定比例的所有客户
- javascript - 受限导航 React Router Dom - 私有和公共路由
- java - JVM 8 SIGSEGV:可能是什么原因?