为什么倒置的 if 语句为假?
Why is the inverted if-statement false?
为什么 if 语句算作假?
int money = -342;
int reviews 3;
if (!(money > 0 || reviews < 5 || reviews > 0)){}
钱是假的,
两条评论都是真实的
并反转它们的结果是物有所值,
两个评论都有两个错误。
因为我正在使用 ||对于'or',一个真应该足以使整个语句变为真。
否定符号否定整个语句。因此,如果这些条件中的任何一个为真,则返回假。如果所有条件都为假,则返回真。
因为以下原因:
if (!(Money > 0 || Reviews < 5 || Reviews > 0))
评估为
if (!(True))
因此,反转,
if (False)
括号优先。
看看条件:
(!(money > 0 || reviews < 5 || reviews > 0))
首先计算括号内的部分:
money > 0 || reviews < 5 || reviews > 0
那么,顺序是从左到右:
money > 0
为假,继续下一步;
reviews < 5
为真,所以括号内的表达式为真。
内部括号内的表达式的计算结果为 true
,因此实际上您的条件等于 !(true)
,这使得 (false)
.
我建议你学习表达式求值和运算符优先级的基础知识。另外,,你需要重新思考你的逻辑。例如,我会将 !(money > 0)
等表达式重写为 money <= 0
,以简化它。在我看来,除非万不得已,否则最好不要将否定运算符 (!
) 与关系运算符(如 <
或 ==
)结合使用。
Note:
The && and || operators perform Conditional-AND and Conditional-OR operations on two boolean expressions. These operators exhibit "short-circuiting" behavior, which means that the second operand is evaluated only if needed.
if (!(Money > 0)){...}
- 它说出现问题,因为货币整数低于 0。 - 不,它说它低于 或等于 0 .
(Money > 0 || Reviews < 5 || Reviews > 0)
- 这是 true
如果 至少 ||
之间的部分之一是 true
,但是:
!(Money > 0 || Reviews < 5 || Reviews > 0)
- 这是 false
如果 至少 ||
之间的部分之一是 true
。使用 !
(否定)会得到相反的结果。
为什么你的值是假的
钱少于零。即false
。
评论少于5。即true
。
然后short-circuits,但如果继续,Reviews 大于0。即true
。
无论如何,由于 or 运算符的工作方式,括号中的整个语句的计算结果为真。然后你反转它,所以它变成 false
.
有解决办法吗?
老实说,你要的好像是money大于0,reviews小于5,reviews大于0的支票。
这意味着您可能应该有类似 money > 0 && reviews <= 5 && reviews >= 0
的内容。我认为这里的评论大约是 0-5 星范围。显然,如果是1比5,那就不一样了。
!(Money > 0) == (Money <= 0)
!(Money > 0 || Reviews < 5 || Reviews > 0) == (Money <= 0 && Reviews >= 5 && Reviews <= 0)
最好不要用!在整个声明之前。
那是因为它满足 Reviews < 5
和 Reviews > 0
为真。
因此 if (!(Money > 0 || Reviews < 5 || Reviews > 0))
中的 if 语句将为假,因为您使用的是 而不是运算符 。这就是它打印 We´re good 的原因。
嗯。等等,我已经这样做了几年了,我很确定“!”也适用于“||”因此使它成为“&&”意味着它永远是假的。
您的 if
测试的计算结果始终为 false
,因为无论 Reviews
的值如何,Reviews < 5
或 Reviews > 0
都将为真,而您是然后否定结果。 (Money
的值无关紧要,因为如果任一操作数为 true
,||
的计算结果为 true
。)我认为您想要的是这三个为真:
Money
必须大于 0
Reviews
必须介于 0 和 5(含)之间
此 if
测试将完成工作:
if (Money <= 0 || Reviews > 5 || Reviews < 0) {
System.out.println("Something went wrong");
} else {
System.out.println("We're good");
}
或者,您可以测试阳性条件:
if (Money > 0 && Reviews >= 0 && Reviews <= 5) {
System.out.println("We're good");
} else {
System.out.println("Something went wrong");
}
让我们逐步了解您的代码条件:
int Money = -356;
double Reviews = 4.8;
if (!(Money > 0 || Reviews < 5 || Reviews > 0)) {
System.out.println("Something went wrong");
} else{
System.out.println("We´re good");
}
给定:
- 金钱=-356
- 评论 = 4.8
Let's break and evaluate the inner if condition first:
(Money > 0 || Reviews < 5 || Reviews > 0)
1. Money > 0 -356 > 0 **False**
2. Reviews < 5 4.8 < 5 **True**
3. Reviews > 0 4.8 > 0 **True**
现在我们可以看到内部条件的计算结果为 True,但如果您注意到在外部添加了一个(逻辑非)" ! " 运算符。
(!(Money > 0 || Reviews < 5 || Reviews > 0))
Called Logical NOT Operator. Use to reverses the logical state of its
operand. If a condition is true then Logical NOT operator will make
false.
因此,当你的内在条件为真时,逻辑非 ! 使它为假。
所以,System.out.println("We´re good");
被执行了。
为什么 if 语句算作假?
int money = -342;
int reviews 3;
if (!(money > 0 || reviews < 5 || reviews > 0)){}
钱是假的,
两条评论都是真实的
并反转它们的结果是物有所值,
两个评论都有两个错误。
因为我正在使用 ||对于'or',一个真应该足以使整个语句变为真。
否定符号否定整个语句。因此,如果这些条件中的任何一个为真,则返回假。如果所有条件都为假,则返回真。
因为以下原因:
if (!(Money > 0 || Reviews < 5 || Reviews > 0))
评估为
if (!(True))
因此,反转,
if (False)
括号优先。
看看条件:
(!(money > 0 || reviews < 5 || reviews > 0))
首先计算括号内的部分:
money > 0 || reviews < 5 || reviews > 0
那么,顺序是从左到右:
money > 0
为假,继续下一步;reviews < 5
为真,所以括号内的表达式为真。
内部括号内的表达式的计算结果为 true
,因此实际上您的条件等于 !(true)
,这使得 (false)
.
我建议你学习表达式求值和运算符优先级的基础知识。另外,!(money > 0)
等表达式重写为 money <= 0
,以简化它。在我看来,除非万不得已,否则最好不要将否定运算符 (!
) 与关系运算符(如 <
或 ==
)结合使用。
Note:
The && and || operators perform Conditional-AND and Conditional-OR operations on two boolean expressions. These operators exhibit "short-circuiting" behavior, which means that the second operand is evaluated only if needed.
if (!(Money > 0)){...}
- 它说出现问题,因为货币整数低于 0。 - 不,它说它低于 或等于 0 .
(Money > 0 || Reviews < 5 || Reviews > 0)
- 这是 true
如果 至少 ||
之间的部分之一是 true
,但是:
!(Money > 0 || Reviews < 5 || Reviews > 0)
- 这是 false
如果 至少 ||
之间的部分之一是 true
。使用 !
(否定)会得到相反的结果。
为什么你的值是假的
钱少于零。即false
。
评论少于5。即true
。
然后short-circuits,但如果继续,Reviews 大于0。即true
。
无论如何,由于 or 运算符的工作方式,括号中的整个语句的计算结果为真。然后你反转它,所以它变成 false
.
有解决办法吗?
老实说,你要的好像是money大于0,reviews小于5,reviews大于0的支票。
这意味着您可能应该有类似 money > 0 && reviews <= 5 && reviews >= 0
的内容。我认为这里的评论大约是 0-5 星范围。显然,如果是1比5,那就不一样了。
!(Money > 0) == (Money <= 0)
!(Money > 0 || Reviews < 5 || Reviews > 0) == (Money <= 0 && Reviews >= 5 && Reviews <= 0)
最好不要用!在整个声明之前。
那是因为它满足 Reviews < 5
和 Reviews > 0
为真。
因此 if (!(Money > 0 || Reviews < 5 || Reviews > 0))
中的 if 语句将为假,因为您使用的是 而不是运算符 。这就是它打印 We´re good 的原因。
嗯。等等,我已经这样做了几年了,我很确定“!”也适用于“||”因此使它成为“&&”意味着它永远是假的。
您的 if
测试的计算结果始终为 false
,因为无论 Reviews
的值如何,Reviews < 5
或 Reviews > 0
都将为真,而您是然后否定结果。 (Money
的值无关紧要,因为如果任一操作数为 true
,||
的计算结果为 true
。)我认为您想要的是这三个为真:
Money
必须大于 0Reviews
必须介于 0 和 5(含)之间
此 if
测试将完成工作:
if (Money <= 0 || Reviews > 5 || Reviews < 0) {
System.out.println("Something went wrong");
} else {
System.out.println("We're good");
}
或者,您可以测试阳性条件:
if (Money > 0 && Reviews >= 0 && Reviews <= 5) {
System.out.println("We're good");
} else {
System.out.println("Something went wrong");
}
让我们逐步了解您的代码条件:
int Money = -356;
double Reviews = 4.8;
if (!(Money > 0 || Reviews < 5 || Reviews > 0)) {
System.out.println("Something went wrong");
} else{
System.out.println("We´re good");
}
给定:
- 金钱=-356
- 评论 = 4.8
Let's break and evaluate the inner if condition first: (Money > 0 || Reviews < 5 || Reviews > 0)
1. Money > 0 -356 > 0 **False**
2. Reviews < 5 4.8 < 5 **True**
3. Reviews > 0 4.8 > 0 **True**
现在我们可以看到内部条件的计算结果为 True,但如果您注意到在外部添加了一个(逻辑非)" ! " 运算符。
(!(Money > 0 || Reviews < 5 || Reviews > 0))
Called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false.
因此,当你的内在条件为真时,逻辑非 ! 使它为假。
所以,System.out.println("We´re good");
被执行了。