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

时间:2012-12-01 19:52:47

标签: java compiler-errors return

我试图告诉Critter程序从四个选项中随机选择攻击类型;我以为我的返回语句基础已被覆盖,但我从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;
   }
 }

任何想法为什么会这样?

6 个答案:

答案 0 :(得分:3)

基本上,编译器不够聪明,无法确定您已经用四个if语句覆盖了所有可能性(它并不真正了解Random.nextInt()返回值的合同)。

因此,您需要在最终return之后添加一个虚拟if。你返回那里并不重要,因为它实际上是死代码。但是,返回某种未使用或明显无效的值将是一种很好的方式。

编辑:在第二个想法,而不是返回虚拟值,最好无条件地抛出某种“程序员错误”异常。

答案 1 :(得分:1)

在if语句之外需要一个缺少的语句。例如,如果flightChoice == 4if条件都不成立,那么您应该在方法的末尾添加return。此返回语句必须返回类似Attack分支的if类型的内容。

答案 2 :(得分:1)

您可能认为 if语句涵盖了所有可能的情况,但编译器只是编译代码,不包括/计算可能性。您需要在最后一个 if-statement 之后添加return语句。

答案 3 :(得分:1)

试想一下,当if condition都不是true时会发生什么?在这种情况下,您不会从该方法返回任何内容。

您应该从您的方法可以遵循的每个路径返回,否则您将收到missing return语句错误。

  • 您可以将if's if-else if阻止,然后添加 最后是else,并从那里返回一些值。
  • 或者,您只需在方法的末尾添加一个return语句。

答案 4 :(得分:0)

如果没有return语句为真,则需要if语句。

答案 5 :(得分:0)

上述/之前的答案解释说,如果没有return为真,则最后需要if语句。在这种情况下,我只想添加一个建议,作为一种好的做法(可能不是最好的):只在结尾处返回一个结果,并为每个if中的返回结果分配一个值(也许添加一些{ {1}}在这种情况下使其更有效率。)