Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 if-then树中缺少返回语句错误_Java_Compiler Errors_Return - Fatal编程技术网

Java if-then树中缺少返回语句错误

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

我试图告诉一个生物程序从四个选项中随机选择一种攻击类型;我以为我已经涵盖了返回语句的基础,但是我从drjava得到了一个“缺少返回语句”错误:

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<代码>抛出新错误()或更详细(毫无意义)的内容。这是使用的好例子。谢谢!在街区的尽头换到另一个地方效果很好