对于参数类型double,boolean,运算符 - =未定义

时间:2016-09-10 13:39:21

标签: java if-statement boolean double

我正在开发一些东西。但是出现错误,我无法修复它。 它说''运算符 - =未定义参数类型double,boolean''在我的代码上:

if (x -= 15.0D < 0.0D) {

我只是遗漏了部分代码。任何人都知道如何解决它?我无法让它发挥作用。谢谢:))

2 个答案:

答案 0 :(得分:8)

由于在Java中定义operator precedence的方式,-=的优先级低于<;因此,x -= 15.0D < 0.0D被评估为:

x -= (15.0D < 0.0D)

x -= false

这不是Java中的有效表达式,因为错误说:

  

对于参数类型double,boolean

,运算符 - =未定义

修复取决于您要表达的内容:

  • 如果您打算说“从x中减去15,然后将x与零进行比较”,您可以将其写为:

    (x -= 15.0) < 0.0
    

    然而,具有副作用的条件(例如,更改变量的值)令人困惑,因为它很容易误读它们,忽略了副作用。它更具可读性(我猜在语义上相同):

    x -= 15.0;
    if (x < 0.0) {
    
  • 如果您打算说“如果x - 15小于零”,则不要使用-=运算符,只需使用普通-

    if (x - 15.0 < 0.0)
    

    请注意,此处不需要内括号,因为-的优先级高于<

    但是,这也更容易表达为:

    if (x < 15.0) {
    

请注意,您不需要.0D后缀:前提是您在文字中有小数点,并且不要使用{{1 }}后缀使其为F,十进制文字为float类型。

double

都是具有相同值的有效15. 15D 15.0 15.D 15.0D 文字。 (就我个人而言,我更喜欢double:我不喜欢以15.0结尾的那个;它看起来不完整; .看起来有点像15D )。

答案 1 :(得分:1)

问题在于优先级。 在这种情况下,“&lt;”的优先顺序超过“ - =”因此你正在执行的“ - =”on是一个布尔值,因为比较的结果将是一个布尔值。因此,您收到错误“运算符 - =未定义参数类型(s)double,boolean”。

使用适当的括号优先处理“ - =”操作来解决它。