【问题标题】:Unreachable Statements if condition Java如果条件 Java,则无法访问语句
【发布时间】:2018-06-12 04:24:42
【问题描述】:
double runde(double x, int n) {
    if (n < 0) {
        throw new IllegalArgumentException("Anzahl der Nachkommastellen darf nicht negativ sein.");

    return 0.0 ; }


     if (n==x) {/* Ist n=x? Wenn ja, dann nicht runden*/
    return x ; } /* X dementsprechend als Rückgabewert */


    if (n>0) {/* Test ob n größer null ist*/ 
    return Math.round(x*Math.pow(10,n))/Math.pow(10,n) ; }}

嘿,我不明白为什么 return 0.0 应该是一个无法访问的语句。 我试图构建一个将数字四舍五入到给定小数位的方法。

此外,还应缺少退货声明。

感谢您的帮助!

【问题讨论】:

  • 如果抛出异常,则方法执行结束
  • 因为你会在你的 if (n
  • 良好的缩进有助于立即发现此类问题 ;-)
  • 编译器无法确定您的某个 if 条件是否为真。因此,理论上,执行可以在最后一个 if 之后通过,然后返回丢失。
  • 如果n 应该是一个精度,那么没有理由将它与x 进行比较。

标签: java if-statement bluej unreachable-statement


【解决方案1】:

如果你的方法抛出异常,它也不能返回值。

你必须选择是否抛出异常:

if (n < 0) {
    throw new IllegalArgumentException("Anzahl der Nachkommastellen darf nicht negativ sein.");
}

或返回0.0:

if (n < 0) {
    return 0.0 ;
}

但你不能两者兼得。

并且你必须有一个最终的 return 语句,以防你的条件都不为真。添加return语句作为方法的最后语句。

【讨论】:

    【解决方案2】:

    您没有遗漏退货声明。其实你有那个额外的。一旦你抛出异常,执行就会在那里终止。因此,没有机会达到该回报。因此,返回线无法到达。根据您的业务选择一个。返回或异常。

    【讨论】:

    • 实际上缺少最后的返回,即使在逻辑上无法达到。
    【解决方案3】:

    你在前面的语句中抛出异常。

    这将结束方法的执行。

    您可能对随机缩进和大括号位置感到困惑。您应该尝试坚持标准格式。编写干净的代码有助于避免错误。

    【讨论】:

      【解决方案4】:

      通过引发异常,您将阻止该方法进一步执行。
      如果异常没有被捕获,整个线程将被中断并关闭。

      如果你不想这样,返回一些只能表示错误的值

      【讨论】:

        【解决方案5】:

        当您抛出异常时,java 编译器会停止执行当前方法,并且控件会移出当前方法, 我建议您为您的问题使用 if else 语句,这样如果第一个条件为真,它就不会跳过命令“return 0.0”

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-20
          • 2020-06-01
          • 1970-01-01
          • 2022-06-16
          • 2018-06-23
          • 2010-12-05
          • 2014-07-26
          • 1970-01-01
          相关资源
          最近更新 更多