【问题标题】:java incompatible type error else-if statementjava不兼容类型错误else-if语句
【发布时间】:2018-03-13 03:06:35
【问题描述】:

我只是想计算这三个值,但不确定我的 else 语句应该放什么。我放了 return 但它一直给我一个不兼容的类型错误。我曾尝试将其设置为 null 和 NaN,但它表明我无法在类型为 double 的情况下做到这一点。任何帮助表示赞赏。

public static double getE(int i) {
    double e = 1, x=1;
    for(i = 1; i <= 100000; i++){
        x=x/i;
        if (i == 10000) {
            return x;
        }
        else if (i == 20000) {
            return x;
        }
        else if (i == 100000) {
            return x;
        } 
        return;
   }  
}

【问题讨论】:

  • 返回一个Double,这样就可以返回null
  • 好奇:传入参数i有什么意义,然后你马上把值扔掉?
  • 更好奇:i 达到 10000 时,您如何期望这两个 else if 永远为真,这使得 @987654327 不可能@ 达到 20000 和 100000?或者实际上,由于你 return 无条件地在循环结束时,i 永远不会超过 1,所以即使是 if 也是没有意义的。
  • 通过 "将其设置为 NaN" 你的意思是你尝试了return Double.NaN;?因为那应该可以正常工作。

标签: java if-statement return incompatibletypeerror


【解决方案1】:

Not-a-Number (NaN) 拥有一个 double 类型的值,它与 Double.longBitsToDouble(0x7ff8000000000000L) 返回的值等价:-

public static final double NaN = 0.0d / 0.0;

由于在您的情况下,您使用的是 原始类型 double(它只是数据而不是对象,因此也不能是 null),您可以使用通过将return 直接更改为

return 0.0d;

并确保它在 for 循环之外

for (i = 1; i <= 100000; i++) {
    x = x / i;
    if (i == 10000) {
        return x;
    } else if (i == 20000) {
        return x;
    } else if (i == 100000) {
        return x;
    }
}
return 0.0d; // default value, in case the for loop wasn't executed

【讨论】:

  • 你是说 0.0 == NaN 吗?因为那绝对不是真的。
  • @yshavit 不,我不是在比较它们,而是说明使用我接下来提到要使用的默认值的相关性。
  • 但是你为什么还要谈论NaN呢?它不是默认值,与此无关。说“NaN 等同于0.0d”是错误的,非常具有误导性。
  • 好吧,我想你应该重新表述一下 NaN 等于 0.0 的说法。我不确定你的意思是什么,如果你不是说他们是平等的。
  • 你在哪里解释返回NaN与返回0.0d的优缺点/差异?
【解决方案2】:

你的代码

public static double getE(int i) {
    double e = 1, x=1;
    for(i = 1; i <= 100000; i++){
        x=x/i;
        if (i == 10000) {
            return x;
        }
        else if (i == 20000) {
            return x;
        }
        else if (i == 100000) {
            return x;
        } 
        return;
   }  
}

严格等价于

public static double getE(int i) {
   return;
}

并且i 输入参数根本未使用。 你想达到什么目的?

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 2012-09-13
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2016-07-21
    • 2017-11-21
    相关资源
    最近更新 更多