为什么这会回归真实?

时间:2017-05-12 14:41:36

标签: java if-statement boolean

我最近开始自学Java,在使用CodingBat后,我留下了一个非常基本的问题。为什么这回归“真实”?

a = 1, b= -1, negative = true

public boolean posNeg(int a, int b, boolean negative) {
  if(!negative && a <= 0 && b >= 0 || a >= 0 && b <= 0){
    return true;
  }else if(negative && a <= 0 && b <= 0){
    return true;
  }
  return false;
}

3 个答案:

答案 0 :(得分:7)

在:

!negative && a <= 0 && b >= 0 || a >= 0 && b <= 0

&&的优先级高于||,表示它与以下内容相同:

(!negative && a <= 0 && b >= 0) || (a >= 0 && b <= 0)

如果其任一操作数为真,则conditional-or operator (||)将返回true:

  • !negative && a <= 0 && b >= 0是错误的,因为negative是假的(就像b >= 0一样,但是没有评估);
  • a >= 0 && b <= 0是真的

因此表达式为true,因此执行if语句,这意味着返回true

答案 1 :(得分:2)

因为:

if (!negative && a <= 0 && b >= 0 || a >= 0 && b <= 0) {
//---(false)------(true)----(false)-----(true)----(true)

诀窍在于||

false && true && false -> false
true && true -> true
(false && true && false) || (true && true) ----> true
     false               ||     true       ----> true

答案 2 :(得分:0)

在你的第一个if if(!negative && a <= 0 && b >= 0 || a >= 0 && b <= 0){ A大于0,b小于0,所以返回true。