【问题标题】:Missing return statement Error缺少返回语句错误
【发布时间】:2013-04-27 10:09:34
【问题描述】:

我刚开始写递归方法。我的 10 次幂方法之一是给我一个缺少返回类型的错误。

public static double powerOfTen(int n)
{

 if (n == 0)
  return 1;

 if(n > 0)
  return (10 * powerOfTen(n - 1));

 if(n < 0)
  return (1 / powerOfTen(n - 1));

}

我很新,所以任何解释都将不胜感激。

////// 编辑 这对我来说很有效,对于十的负数和正数。感谢您的帮助:D

public static double powerOfTen(int n)
{

 if(n > 0)
  return (10 * powerOfTen(n - 1));

 if(n < 0)
  return (1 / powerOfTen( (-1)*(n) ));


 return 1;

}

【问题讨论】:

  • 最后一个if 中的可能错误:不应该涉及n + 1 而不是n - 1
  • if(n
  • 那行得通。 ((-1)*(n)也可以写成-n。)

标签: java recursion compiler-errors return


【解决方案1】:

试试:

public static double powerOfTen(int n)
{
 if(n > 0)
  return (10 * powerOfTen(n - 1));

 if(n < 0)
  return (1 / powerOfTen(n - 1));

  return 1;
}

编译器认为它不能保证总是返回一个值,因为所有返回都在if 语句中。这样做可以消除混乱

【讨论】:

    【解决方案2】:

    请更改您的代码:

    重点很明确:如果该语句是 false,我不希望 函数继续,所以我会 return 你错过了。

     public static double powerOfTen(int n)
        {
         if(n>1){             //check for positive n value
         if(n > 0){
          return (10 * powerOfTen(n - 1));
        }else if(n < 0){
          return (1 / powerOfTen(n - 1));
        }
        }
          return something;  //here error
        }
    

    作为最佳实践的附注,请在if else statements.之间使用{ }

    【讨论】:

    • 好的编译好了。我主要进行了一个小测试。但是当我为 n 输入一个负整数时,我得到一个堆栈溢出错误。似乎无限循环。帮忙?
    • 所以请先检查天气 n 是否 >1。如果 n>1,那么只有剩下的事情才能完成。更新我的答案。
    • 解决了溢出问题,但该方法对任何通过的负整数返回 1.0。
    • 你的期望是什么?你最终会返回 1,因此它会转换为双精度数,即 1.0。如果 negetivd 输入是否有您期望返回的内容。?
    • 如果我通过 -3 我希望它返回 0.001
    【解决方案3】:

    编译器没有进行范围覆盖测试,因此它不会注意到您的代码覆盖了 int n 的所有可能值,因此不会出现错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2013-03-21
      • 2016-01-04
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多