【问题标题】:Java missing return statement [duplicate]Java缺少返回语句[重复]
【发布时间】:2014-09-22 14:13:03
【问题描述】:

我有以下代码

class dog{
    String name;
    int barksLeft;
    int bark(int howManyTimes){
        while(howManyTimes >3){
            System.out.println("woff!");
            howManyTimes-=1;
            return howManyTimes;
       }
     }
}

public class implementDog{
    public static void main (String[] args) {
        dog pupy = new dog();
        pupy.barksLeft = pupy.bark(6);
        System.out.println("You have "+pupy.barksLeft+" barks left");

    }
}

当我编译它时,我得到了这个错误

implementDog.java:10: error: missing return statement
    }
    ^
1 error

这是我检查的内容:

  • “bark”方法不是 void 并且期望返回一个 int
  • 返回的变量也是 int 类型
  • 我想做的是用方法的返回值填充引用变量 pupy.barksleft,这样我就可以打印它了。

我错过了什么?

【问题讨论】:

    标签: java methods return


    【解决方案1】:

    如果您的方法返回 void 以外的内容,则需要确保通过该方法的每个逻辑路径都显式返回适当对象/类型的内容。在您的情况下,请考虑 howManyTimes 小于或等于 3 的情况 - 它将跳过 while 块,并走到最后。由于那里没有明确的 return 语句,因此该方法在这种情况下不会返回任何内容,这是不正确的 - 在所有情况下它都应该返回 int

    还应注意,非 void 方法中的最后一条语句应该是 returnthrow

    【讨论】:

    • +1 ;奇怪的是,您的答案是唯一真正回答问题的答案,指出在非空函数/方法中,每条路径都必须返回一些东西;如果您只是提到在这种情况下*非 void 方法中的最后一条语句始终必须是 returnthrow *,那将是完美的。
    • 非常感谢您的详细解释,不胜感激!
    • throw 的通话很好,我在 :) 中添加了这一点
    【解决方案2】:

    您应该将 return 语句放在 while() 循环下面,在它关闭之后。您编写代码的方式不仅可能永远不会返回(例如,如果howManyTimes <= 3 它不会通过循环),而且即使在howManyTimes > 3 的情况下,该方法也会在循环的一次迭代后自动退出。 return 不仅退出方法,还导致程序跳出它所在的任何循环。

    【讨论】:

      【解决方案3】:

      由于while(howManyTimes >3) 可能永远不会为真,因此在这种情况下您不会有任何返回语句。您必须在循环之后添加一个 return 语句。

      【讨论】:

      • 这样做是有道理的。非常感谢!
      【解决方案4】:

      试试下面这个 return 语句 while

      class dog{
              String name;
              int barksLeft;
              int bark(int howManyTimes){
                  while(howManyTimes >3){
                      System.out.println("woff!");
                      howManyTimes-=1;
      
      
                  }
      
                 return howManyTimes;
               }
      
          }
      
          public class stackof{
              public static void main (String[] args) {
                  dog pupy = new dog();
                  pupy.barksLeft = pupy.bark(6);
                  System.out.println("You have "+pupy.barksLeft+" barks left");
      
              }
          }
      

      【讨论】:

      • 是的,已经解决了,我明白为什么了,非常感谢!
      • 如果这对你有帮助,请投票作为答案,谢谢
      • 如果您尝试提供实际代码作为答案,您应该使用常规成语howManyTimes--;,更不用说您还应该修复代码的格式/缩进。
      猜你喜欢
      • 2014-01-09
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 2013-03-21
      • 2016-01-04
      • 2016-02-05
      • 2016-06-10
      • 2014-03-01
      相关资源
      最近更新 更多