2

我试图告诉 Critter 程序从四个选项中随机选择一种攻击类型;我以为我已经涵盖了我的 return 语句基础,但是我从 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;
   }
 }

知道为什么会这样吗?

4

6 回答 6

3

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

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

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

于 2012-12-01T19:54:47.797 回答
1

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

于 2012-12-01T19:53:18.757 回答
1

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

于 2012-12-01T19:54:10.327 回答
1

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

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

  • 您可以创建if's一个if-else if块,然后else在最后添加一个,然后从那里返回一些值。
  • 或者,您可以简单地在方法的末尾添加一个 return 语句。
于 2012-12-01T19:54:24.990 回答
0

return如果没有if陈述是真的,你需要一个陈述。

于 2012-12-01T19:54:38.423 回答
0

上述/先前的答案解释说return,如果否if为真,您需要在最后声明。在这种情况下,我只想添加一个建议,作为一种好的做法(也许不是最好的):只在最后返回一个结果并为每个返回的结果分配一个值if(也许添加一些elses 以使其更有效在这种情况下)。

于 2012-12-01T20:04:28.503 回答