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;
}
为什么这会给我一个丢失的返回语句错误?每个if/else都有一个返回值,最后一个括号出现错误
8条答案
按热度按时间bttbmeg01#
你需要一个else来让它如你所期望的那样工作,它不会评估你的条件来知道它总是会回来的
vjhs03f72#
不需要一个
else
过了一段时间return
声明:请注意,这解决问题的原因是编译器不检查逻辑上必须返回的解决方案。e、 g.当a必须><或=到b时,它不检查该关系。它正在寻找明确覆盖每一条路径的可能性。
tv6aics13#
基本上,编译器没有足够的智能来实现这一点
number == randomnumber || number < randomnumber || number > randomnumber
是重言式。既然你没有else
,它认为有可能通过条件,然后到达函数的结尾而不返回。最简单的解决办法是改变你的最后一个elseif
只是一个else
. 从之前的情况来看number > randomnumber
如果你说的是真的(如果你有妄想症并且想确定,你可以添加Assert。)fhity93d4#
你可以试着换衣服
else if
至else
.j7dteeu85#
编译器不需要知道
if
/else
树覆盖了所有可能的案例。如果你能写出一些编译器足够聪明的代码来判断代码是否正确,而其他编译器却不正确,那就太糟糕了。java要求您编写清晰、干净的代码,而不是精确地说明编译器必须有多聪明。根据java规范中的定义,函数的右大括号是可以到达的。你能证明它是不可达的,通过其他一些定义“可达”并不重要。java规范中的“可达”概念是一个正式的概念,在编译器可以实际实现的规范中有详细的解释。这不是常识上的“可达性”概念,人们无论如何也不可能用计算机来教它。
s8vozzvw6#
应在
else
或者在整个世界之外if/else-if
. 有可能一个回报是永远不会与所有回报取决于一个条件如果条件1、2或3都不满足,则不会返回。报税表应随时提供。所以解决方法是:
或
eqzww0vc7#
java要求保证非void方法返回一些东西(即使它是null)。如果有if语句,根据定义,只有有时您的return语句才会运行。
else语句不是必需的,但它确实使imo更容易理解。
nzrxty8p8#
每
return
语句位于if
声明。虽然它在逻辑上可能不可能如所写的那样,但是编译器需要返回if
评估正确。我建议:
在我看来,这个解决方案解决了编译器的问题,并略微提高了可读性。
或者,有这样的解决方案:
抛出异常将允许您在不返回任何内容的情况下退出该方法。。。因为可以说,如果你进入决赛
else
,显然出了问题。