Java if-then树中缺少返回语句错误
我试图告诉一个生物程序从四个选项中随机选择一种攻击类型;我以为我已经涵盖了返回语句的基础,但是我从drjava得到了一个“缺少返回语句”错误:Java if-then树中缺少返回语句错误,java,compiler-errors,return,Java,Compiler Errors,Return,我试图告诉一个生物程序从四个选项中随机选择一种攻击类型;我以为我已经涵盖了返回语句的基础,但是我从drjava得到了一个“缺少返回语句”错误: public Attack fight(String opponent) { int fightChoice = new Random().nextInt(4); if(fightChoice == 0){ return Attack.ROAR; } if(fightChoice == 1){ return At
public Attack fight(String opponent) {
int fightChoice = new Random().nextInt(4);
if(fightChoice == 0){
return Attack.ROAR;
} if(fightChoice == 1){
return Attack.POUNCE;
} if(fightChoice == 2){
return Attack.SCRATCH;
} if(fightChoice == 3){
return Attack.FORFEIT;
}
}
知道原因吗?您需要在if语句之外缺少一条语句。例如,如果
flightChoice==4
,则所有if
条件都不成立,因此您应该在方法末尾添加一个return
。此返回语句必须返回类型为Attack
的内容,如if
分支。您可能认为if语句涵盖了所有可能的情况,但编译器只是编译代码,没有涵盖/计算可能性。您需要在最后一个if语句之后添加return
语句。试想一下,如果您的if条件
都不是真的
,会发生什么?在这种情况下,您将不会从该方法返回任何内容
您应该从方法可以遵循的每个路径返回,否则您将得到missing return
语句错误
- 您可以将
设置为if
块,然后添加 在末尾添加一个if-else-if
,并从中返回一些值else
- 或者,您可以简单地在方法末尾添加一个return语句
返回
语句,以防no的情况。基本上,编译器没有足够的智能来计算出您已经用四个if
语句覆盖了所有的可能性(它并不真正知道关于Random.nextInt()
返回值的契约)
因此,您需要在最后的if
之后添加一个伪return
。返回什么并不重要,因为它实际上是死代码。然而,返回某种未使用或明显无效的值是一种好的方式
edit:再想一想,与其返回一个伪值,不如无条件地抛出某种“程序员错误”异常。上面/前面的答案解释说,如果
为真,则在结尾需要一个return
语句。我只想添加一个建议,作为这种情况下的一个良好实践(可能不是最好的做法):只在结尾处返回一个结果,并在每个if
中为返回的结果指定一个值(可能添加一些或以提高这种情况下的效率)。+1<代码>抛出新错误()代码>或更详细(毫无意义)的内容。这是使用的好例子。谢谢!在街区的尽头换到另一个地方效果很好