【问题标题】:playing with java Operators (XOR and AND/OR)玩 Java 运算符(XOR 和 AND/OR)
【发布时间】:2011-01-18 19:29:19
【问题描述】:

在一个程序中,我试图检查两个布尔值(从函数返回);需要检查的条件是:
-只有当返回值中的任何一个为真而另一个为假时,我才有问题;
- 否则,如果两者都是对或错,我很高兴进入下一步。

以下两个示例中哪一个是检查条件的有效方法,还是有更好的解决方案?
a 和 b 是整数值,我在 isCorrect 函数中检查条件是否正确,它返回 true 或 false。

1.

 // checking for the correctness of both a and b
 if ((isCorrect(a) && !isCorrect(b)) ||
     (!isCorrect(a) && isCorrect(b)))
 { 
   // a OR b is incorrect
 }
 else
 {
   // a AND b are both correct or incorrect
 }

2.

  // checking for the correctness of both a and b
  if (! (isCorrect(a) ^ isCorrect(b)))
  {
    // a OR b is incorrect
  }
  else
  {
    // a AND b are correct or incorrect
  }


谢谢,
伊瓦尔

P.S:代码可读性不是问题。 编辑:我的意思是在第二个选项中有一个 XOR。 另外,我同意 == 和 != 选项,但如果我必须使用布尔运算符怎么办?

【问题讨论】:

  • 你的第二个例子好像有错误。
  • @Nikita:确实,右括号。

标签: java operators


【解决方案1】:
if (isCorrect(a) != isCorrect(b)) {
  // a OR b is incorrect
} else {
  // a AND b are correct or incorrect
}

【讨论】:

  • +1 简单,切中要害,顺序与问题相同,cmets 相同
  • 这并不意味着 cmets 实际上是有意义的 ;-)
  • 同意,但 OP 会更容易跟进。
【解决方案2】:

您的测试不需要布尔运算符,只需:

if (isCorrect(a) == isCorrect(b)) {
    // they both have the same value
} else {
    // they don't ...
}

编辑 - 我故意不使用相同的 cmets 来反映评论的主要目的应该是描述意图,而不是具体的实现。在这种情况下,最简单的意图声明是ab 都获得了相同的结果。

【讨论】:

    【解决方案3】:

    简单地说:

      if (isCorrect(a) == isCorrect(b))
      {
           // a AND b are both correct or incorrect
      } else {
          // a OR b is incorrect
    
      }
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      if(isCorrect(a) != isCorrect(b))
      {
        //problem
      }
      else
      {
        //not a problem
      }
      

      您也可以使用 XOR,但 != 可以正常工作,并且如果您处理的是布尔值,IMO 更具可读性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 2015-02-26
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-08
        相关资源
        最近更新 更多