我假设这是我忽略的一些逻辑错误,我希望有人可以在这种情况下启发我的Java机制。 if Studio语句中的第一个条件(id == R.id.checkbox1)被Android Studio突出显示为始终为假,为什么?
@Override
public void onClick(View view) {
int id = view.getId();
int page = viewPager.getCurrentItem();
boolean cBoxChecked = false;
switch(page) {
case 0: case 1: case 3: case 4: case 6: case 10:
if(id == R.id.button2)
answersStatus.set(page, true);
else
answersStatus.set(page, false);
case 2:
if(id == R.id.button1)
answersStatus.set(page, true);
else
answersStatus.set(page, false);
case 5: case 7:
if(id == R.id.checkbox1 || id == R.id.checkbox4 && cBoxChecked)
cBoxChecked = true;
//____________________
else if(id == R.id.checkbox1 || id == R.id.checkbox4 && !cBoxChecked)
//^^^^^^^^^^^^^^^^^^^^
answersStatus.set(page, true);
else
answersStatus.set(page, false);
case 8:
if(id == R.id.checkbox1 || id == R.id.checkbox5 && cBoxChecked)
cBoxChecked = true;
//____________________
else if(id == R.id.checkbox1 || id == R.id.checkbox5 && !cBoxChecked)
//^^^^^^^^^^^^^^^^^^^^
answersStatus.set(page, true);
else
answersStatus.set(page, false);
case 9:
}
}
答案 0 :(得分:3)
这是代码片段之一。
if(id == R.id.checkbox1 || id == R.id.checkbox4 && cBoxChecked)
cBoxChecked = true;
else if(id == R.id.checkbox1 || id == R.id.checkbox4 && !cBoxChecked)
answersStatus.set(page, true);
else
answersStatus.set(page, false);
当 EITHER if
为真时,将执行第一个id == R.id.checkbox1
的“then”语句或当id == R.id.checkbox4 && cBoxChecked
为真。
因此,如果您转到else if
,则表示id == R.id.checkbox1
不能为真。这就是编译器所说的。
在Java(以及我遇到的大多数/所有其他编程语言中)&&
的优先级高于||
。
也许你打算写这个:
if ((id == R.id.checkbox1 || id == R.id.checkbox4) && cBoxChecked)
cBoxChecked = true;
else if ((id == R.id.checkbox1 || id == R.id.checkbox4) && !cBoxChecked)
answersStatus.set(page, true);
else
answersStatus.set(page, false);
答案 1 :(得分:2)
&&
优先于||
所以当你写下面的陈述:
if(id == R.id.checkbox1 || id == R.id.checkbox4 && cBoxChecked)
它会检查
id == R.id.checkbox1
或
id == R.id.checkbox4 && cBoxChecked
现在另一个if语句说:
else if(id == R.id.checkbox1 || id == R.id.checkbox4 && !cBoxChecked)
将再次分成
id == R.id.checkbox1
或
id == R.id.checkbox4 && !cBoxChecked
作为第一个声明" id == R.id.checkbox1
"是相同的,只要它是真的,if if中的语句将被调用,而不是if。
希望这是有道理的。