基于Python imports wrong version of sqlite when running tests和this的答案Java对&&
和||
运算符采用短路。它还使&&
的优先级高于||
。但是以下代码的计算结果为true
:
boolean condition1 = true;
boolean condition2 = true;
boolean condition3 = true;
if ( !condition3 && condition1 || condition2 ) {
System.out.println("Condition is true"); // prints Condition is true
}
由于condition3
设置为true
,因此应该导致!condition3
为假,那么Java为什么还要检查condition1
?
如果我在第一个条件周围加上括号,它仍然会评估为true:
if ( (!condition3) && condition1 || condition2 ) {
System.out.println("Condition is true");
}
我了解为什么这段代码的评估结果为true:
if ( condition1 || condition2 && !condition3) {
System.out.println("Condition is true");
}
因为Java一旦在||
之后遇到condition1
,它甚至都不会检查以下条件。但是我不明白为什么前两个示例评估为true。
我的目标是要求condition3
为假,然后让 conditon1
或condition2
(或两者)为真(但如果{{ 1}}是condition3
,那么无论true
和condition1
的评估方式如何,我都不想执行print语句
谢谢
答案 0 :(得分:8)
您说:
与||相比,它具有&&更高的优先级。
这意味着printFunction()
将首先被评估。
所以
$groups = [];
foreach($data as $user)
{
$userGroupId = $user['GroupId'];
$exists = false;
foreach($groups as $group)
{
$groupId = $group['GroupId'];
if ($groupId == $userGroupId)
{
$users = $group['users'];
$currentUser = array(
'UserId'=>$user['UserId'],
'UserName'=>$user['UserName'],
'Surname'=>$user['Surname']
);
array_push($users, $currentUser);
$exists = true;
break;
}
}
if (!$exists)
{
$addGroup = array(
'GroupId'=>$user['GroupId'],
'GroupName'=>$user['GroupName'],
'users'=>[array(
'UserId'=>$user['UserId'],
'UserName'=>$user['UserName'],
'Surname'=>$user['Surname']
)]
);
array_push($groups, $addGroup);
}
}
等于:
!condition3 && condition1
由于!condition3 && condition1 || condition2
为(!condition3 && condition1) || condition2
,因此表达式为condition2
。