【问题标题】:Invert bool if true如果为真,则反转布尔值
【发布时间】:2014-01-24 08:26:33
【问题描述】:

如果另一个布尔值为真,那么反转一个布尔值的最简洁的方法是什么。换句话说,写condition ? !value : value 的最短方法是什么,最好只评估一次value

编辑:你知道,我将结果传递给一个方法

【问题讨论】:

  • 我不明白你的问题
  • 在我看来,“value = condition?!value:value”是最简洁的形式。
  • @gtgaxiola 如果您正在寻找最精简的形式,使用 xor 比使用三元运算符要短得多。
  • @SajadLfc 不,这不是重复的。这个问题有点多。

标签: java boolean


【解决方案1】:

最短的路是

value ^= condition;

【讨论】:

  • 不是传递给方法的最佳形式,但任何称职的程序员都知道这是value = value ^ condition 的简写。感谢您的帮助。
  • 另一种方式是value = value != condition
【解决方案2】:

你想要的就是

if (condition)
    value = !value;

无需带入条件运算符;那只是不必要的混乱。这会比这个更可取的原因

value = condition ? !value : value;

是因为上面执行的赋值与condition 的值无关;如果conditionfalse,我们只需将value 分配给它自己。这也有效,但在逻辑上并不是你真正想要的。您想反转 value(即执行分配)如果 condition 为真。我认为第二种变体只是对条件运算符的滥用。除此之外,第一个变体当然更易读,更容易理解。

【讨论】:

    【解决方案3】:

    你可以试试:

    value = condition ^ value
    

    虽然不是最易读的解决方案。

    【讨论】:

      【解决方案4】:

      你为什么还要为短期或长期而烦恼。更喜欢可读性更高的代码。你可以写

      if (SomeCondition) {
          value = !value;
      }
      

      由于不需要 else 条件,因为 value 在 else 中是 value

      【讨论】:

        【解决方案5】:

        这就是你要找的东西吗?

        if(condition)
           value = !value
        

        【讨论】:

          【解决方案6】:

          正如你的问题所说的'invert bool if true'

          你应该使用:

           if(statement)
              {
          
              value=!value;
              }
          

          【讨论】:

          • 使用if(statement==true),您可以很容易地把它写成if(statement=true)。为避免此类错误,最好使用yoda conditions: if (true==statement) 或仅使用if(statement),因为statement==true 与仅statement 相同。
          • @Pshemo;就像尤达条件一样,我愿意。
          【解决方案7】:

          一个好的方法是拥有这样的函数或方法

          boolean invert(boolean condition, boolean value){ return condition != value; }

          事实上:

          condition value  inversion
          t           t      f
          t           f      t
          f           t      t
          f           f      f
          

          在前两种情况下条件为真并执行反转,否则在后两种情况下。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-04-25
            • 1970-01-01
            • 1970-01-01
            • 2023-03-14
            • 2017-12-11
            • 2020-01-05
            • 2019-04-29
            相关资源
            最近更新 更多