【问题标题】:Missing return statement error in Java if-then treeJava if-then 树中缺少返回语句错误
【发布时间】:2012-11-19 17:31:09
【问题描述】:

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

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;
   }
 }

知道为什么会这样吗?

【问题讨论】:

标签: java compiler-errors return


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      你应该从你的方法可以遵循的每条路径返回,否则你会得到missing return语句错误。

      • 您可以将 if's 设为 if-else if 块,然后添加 一个else,并从那里返回一些值。
      • 或者,您可以简单地在方法末尾添加一个 return 语句。

      【讨论】:

      • 谢谢!在块的末尾交换到一个 else 工作得很好
      【解决方案4】:

      如果没有if 语句为真,您需要一个return 语句。

      【讨论】:

        【解决方案5】:

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

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

        编辑:再想想,与其返回一个虚拟值,不如无条件地抛出某种“程序员错误”异常。

        【讨论】:

        • 第二个想法+1。 throw new Error(); 或更多(毫无意义)详细说明。
        【解决方案6】:

        上述/以前的答案解释说,如果没有 if 为真,您最后需要一个 return 语句。在这种情况下,我只想添加一个建议,作为一种好的做法(也许不是最好的):只在最后返回一个结果,并在每个 if 中为返回的结果分配一个值(也许添加一些 else s 以在这种情况下提高效率)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-18
          • 1970-01-01
          • 2014-01-09
          • 2014-08-20
          • 2013-04-27
          • 2023-02-21
          • 1970-01-01
          • 2015-06-01
          相关资源
          最近更新 更多