public int checkGuess(int g, int randomnumber){
number=g;
this.randomnumber= randomnumber;
if (number == randomnumber)
return 0;
else if (number < randomnumber)
return -1;
else if (number > randomnumber)
return 1;
}
为什么这会给我一个丢失的return语句错误?每个if / else都有回报 错误出现在最后一个括号
答案 0 :(得分:8)
每个return
语句都在if
语句中。虽然在编写逻辑上可能是不可能的,但是当if
都没有评估为真时,编译器需要返回。
我建议:
public int checkGuess(int number, int randomnumber){
int retVal = 0;
this.randomnumber= randomnumber;
if (number == randomnumber) {
retVal = 0;
} else if (number < randomnumber) {
retVal = -1;
} else if (number > randomnumber) {
retVal = 1;
}
return retVal;
}
在我看来,这个解决方案可以解决编译器问题并略微提高可读性。
或者,有这个解决方案:
public int checkGuess(int number, int randomnumber){
this.randomnumber= randomnumber;
if (number == randomnumber) {
return 0;
} else if (number < randomnumber) {
return -1;
} else if (number > randomnumber) {
return 1;
} else {
//throw an exception
}
}
抛出一个异常将允许你退出方法而不返回任何东西......因为可以说,如果你到达最后的else
,显然出现了问题。
答案 1 :(得分:3)
您可以尝试将las else if
更改为else
。
if (number == randomnumber)
return 0;
else if (number < randomnumber)
return -1;
else
return 1;
答案 2 :(得分:2)
编译器不需要能够确定您的if
/ else
树是否涵盖了所有可能的情况。如果你能编写一些代码,那些编译器很聪明,可以搞清楚并且其他编译器没有,那就太糟糕了。 Java要求您编写清晰,干净的代码,而不是精确地确定编译器的精确程度。
根据Java规范中的定义,函数的结束大括号是可达的。您可以证明某些其他“可达”定义无法访问它并不重要。 Java规范的“可达”概念是规范中详细解释的正式概念,编译器可以实际实现。它不是“可达”的常识概念,无论如何都无法教给计算机。
答案 3 :(得分:2)
基本上,编译器不够智能,以至于number == randomnumber || number < randomnumber || number > randomnumber
是重言式。由于你没有else
,它认为你可能会超过条件,然后在没有返回的情况下点击函数的结尾。最简单的解决方法是将您的上一个elseif
更改为else
。您从以前的条件中了解到number > randomnumber
如果达到这一点必须是真的。 (如果你是偏执狂,你可以添加一个断言,并且想要确定。)
答案 4 :(得分:1)
else
声明之后无需return
:
if (number == randomnumber)
return 0;
if (number < randomnumber)
return -1;
// Must be true: if (number > randomnumber)
return 1;
请注意,解决此问题的原因是编译器不检查逻辑上必须返回的解决方案。例如而A必须> &LT;或=到B,它不检查该关系。它正在寻找明确涵盖每条路径的可能性。
答案 5 :(得分:0)
你需要一个其他的工作,如你所料,它不会评估你的条件,知道它将永远返回
答案 6 :(得分:0)
应在else
内或整个if/else-if
内进行返回。根据条件
if (condition 1)
return a;
else if (condition 2)
return b;
else if (condition 3)
return c;
如果不满足条件1,2或3,则不会返回。应始终提供退货。所以修复就是:
if (condition 1)
return a;
else if (condition 2)
return b;
else if (condition 3)
return c;
else
return d;
或者
if (condition 1)
return a;
else if (condition 2)
return b;
else if (condition 3)
return c
return d;
答案 7 :(得分:0)
Java要求保证非void方法返回一些东西(即使它是null)。如果有if语句,根据定义,有时只运行return语句。
if(number == randomnumber) {
return 0;
} else if(number < randomnumber) {
return -1;
} else if(number > randomnumber) {
return 1;
} else {
return -2;
}
else语句不是必需的,但它确实更容易理解imo。