为什么if语句计为false?
int money = -342;
int reviews 3;
if (!(money > 0 || reviews < 5 || reviews > 0)){}
钱是假的,
两个评论都是真实的
并将它们反转为真实的货币,
这两篇评论都有两个谬误
因为我正在使用||对于'或',一个真实应该足以使整个陈述变为真实。
答案 0 :(得分:1)
您的if
测试始终评估为false
,因为无论Reviews
的值是什么,Reviews < 5
或Reviews > 0
都是真的,然后您就是否定结果。 (Money
的值无关紧要,因为如果任一操作数为||
,true
的计算结果为true
。)我认为你想要的是这三个是真的:< / p>
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");
}
答案 1 :(得分:0)
否定符号否定了整个陈述。因此,如果这些条件中的任何一个为真,则返回false。如果所有条件都为假,则返回true。
答案 2 :(得分:0)
括号优先。
看一下条件:
(!(money > 0 || reviews < 5 || reviews > 0))
首先,评估内括号内的部分:
money > 0 || reviews < 5 || reviews > 0
然后,顺序是从左到右:
money > 0
是假的,继续下一个; reviews < 5
为真,因此内括号中的表达式为真。内括号内的表达式的计算结果为true
,因此您的条件有效等于!(true)
,这使得(false)
。
我建议你学习表达式评估和操作符优先级的基础知识。另外,as pointed out by Ted Hopp,您需要重新考虑您的逻辑。例如,我会将!(money > 0)
等表达式重写为money <= 0
,以简化它。在我看来,最好不要将否定运算符(!
)与关系运算符(如<
或==
)结合使用,除非你绝对必须这样做。 / em>的
Note:
&amp;&amp;和||运算符对两个布尔表达式执行条件AND和条件OR运算。这些操作员表现出短路&#34;行为,这意味着仅在需要时才评估第二个操作数。
答案 3 :(得分:0)
if (!(Money > 0)){...}
- 它表示由于Money整数低于0而出现问题。 - 不,它表示它低于或等于0。
(Money > 0 || Reviews < 5 || Reviews > 0)
- true
如果{strong>至少 ||
之间的某个部分为true
,则为!(Money > 0 || Reviews < 5 || Reviews > 0)
,但是:
false
- ||
如果至少 true
之间的某个部分为!
,则为SELECT
CurrentPupil.SchoolID AS 'SchoolID',
CurrentPupil.PupilID AS
'PupilID',
PupilPersonalDetails.Surname AS 'Surname',
PupilPersonalDetails.Forename AS 'First_Name',
PupilCurrentSchoolYearGroupLookupDetails.Description AS 'Year_Group'
FROM CurrentPupil
LEFT OUTER JOIN PupilPersonalDetails AS PupilPersonalDetails
ON CurrentPupil.SchoolID = PupilPersonalDetails.SchoolID
AND CurrentPupil.PupilID = PupilPersonalDetails.PupilID
LEFT OUTER JOIN PupilCurrentSchool AS
PupilCurrentSchool
ON CurrentPupil.SchoolID = PupilCurrentSchool.SchoolID
AND CurrentPupil.PupilID = PupilCurrentSchool.PupilID
LEFT OUTER JOIN LookupDetails
AS PupilCurrentSchoolYearGroupLookupDetails
ON PupilCurrentSchoolYearGroupLookupDetails.LookupDetailsID =
PupilCurrentSchool.YearGroup
AND PupilCurrentSchoolYearGroupLookupDetails.LookupID = '3004'
AND PupilPersonalDetails.PupilID
INNER JOIN [win2k12sql].USERFILE.dbo.pupil
ON PupilID = user_file_userid
WHERE ('%wc%' = '%wc%')
。你会得到与[Route("{id}", Name = "GetById")]
[HttpGet]
[ProducesResponseType(typeof(SomeType), (int)HttpStatusCode.OK)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.Unauthorized)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.Forbidden)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.BadRequest)]
[ProducesResponseType(typeof(string), (int)HttpStatusCode.ServiceUnavailable)]
public async Task<IActionResult> Get(string id, bool? includeNonActive = false)
{
// some stuff
}
(否定)相反的结果。
答案 4 :(得分:0)
为什么你的价值是假的
钱少于零。那是false
。
评论小于5.即true
。
然后短路,但如果你继续,评论大于0.那就是true
。
无论如何,括号中的整个语句因为一个或运算符的工作方式而评估为true。然后你反转它,所以变成false
。
解决方案?
老实说,似乎你想要的是检查金钱是否大于0,评论小于5且评论大于0。
这意味着您可能应该拥有money > 0 && reviews <= 5 && reviews >= 0
之类的内容。我认为这里的评论类似于0-5星级范围。显然,如果它是1到5,那就不同了。
答案 5 :(得分:0)
!(Money > 0) == (Money <= 0)
!(Money > 0 || Reviews < 5 || Reviews > 0) == (Money <= 0 && Reviews >= 5 && Reviews <= 0)
最好不要使用!在整个声明之前。
答案 6 :(得分:0)
多数民众赞成,因为它令Reviews < 5
和Reviews > 0
满意。
因此,if (!(Money > 0 || Reviews < 5 || Reviews > 0))
中的if语句将为false,因为您使用的是 not operator 。请说明打印我们好的的原因。
答案 7 :(得分:0)
嗯。等我已经这样做了几年了,我很确定“!”也适用于“||”从而使它成为“&amp;&amp;”这意味着它总是错误的。
答案 8 :(得分:0)
让我们一步一步了解您的代码条件:
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");
}
鉴于:
让我们首先打破并评估内部if条件: (Money&gt; 0 ||评论&lt; 5 ||评论&gt; 0)
1. Money > 0 -356 > 0 **False**
2. Reviews < 5 4.8 < 5 **True**
3. Reviews > 0 4.8 > 0 **True**
现在我们可以看到内部条件评估为真但如果你注意到有(逻辑上没有)&#34; ! &#34; 运营商在外面添加。
(!(Money > 0 || Reviews < 5 || Reviews > 0))
被称为逻辑非运算符。用于反转其逻辑状态 操作数。如果条件为真,则Logical NOT运算符将生成 假的。
因此,当你的内在条件为真时,逻辑不是!使其成为假。
所以,System.out.println("We´re good");
被执行了。
答案 9 :(得分:-1)
因为以下内容:
if (!(Money > 0 || Reviews < 5 || Reviews > 0))
评估为
if (!(True))
因此,倒置,
if (False)