我最近开始自学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;
}
答案 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。