所以在Java上,“AND”语句是&&,“OR”语句是|| ...
那么对于XOR来说......那就是我有两个选择。我必须选一个,但我不能同时选择。
但是,
private class CheckBoxListener implements ItemListener{
public void itemStateChanged(ItemEvent e)
{
if(one.isSelected()^two.isSelected()){
thehandler handler = new thehandler();
button.addActionListener(handler);
}
}}
即使我同时选中了两个复选框,该按钮也会“启用”。这是按钮fyi的处理程序:
private class thehandler implements ActionListener{
public void actionPerformed(ActionEvent event){
dispose();
}
因此,如果两者都被选中,并且如果我单击按钮。框架不应该丢弃。它应该只在选择其中任何一个时处理。
答案 0 :(得分:6)
^
是Java中的XOR运算符。
关于Swing问题,问题是您在单击按钮时没有检查复选框的状态,而是在选中复选框时。你应该这样做:
private class ButtonActionListener implements ActionListener {
/*
* You will probably define a constructor that accepts the two checkboxes
* as arguments.
*/
@Override
public void actionPerformed(ActionEvent event) {
if (one.isSelected() ^ two.isSelected()) {
dispose();
}
}
}
另一种方法是创建ActionListener
的一个实例。当选中其中一个复选框时,您可以使用addActionListener
添加它,然后使用removeActionListener
将其删除:
private class CheckBoxListener implements ItemListener {
private ActionListener buttonActionListener = new thehandler();
@Override
public void itemStateChanged(ItemEvent event) {
if(one.isSelected() ^ two.isSelected()) {
button.addActionListener(buttonActionListener);
} else {
button.removeActionListener(buttonActionListener);
}
}
}
答案 1 :(得分:5)
您可以使用!=
运算符。对于两个布尔值,它具有与“实际”XOR运算符相同的真值表。
答案 2 :(得分:4)
正如其他答案中所指出的,布尔(和按位)表达式的xor运算符是^
。
boolean a = true;
boolean b = false;
boolean c = a ^ b; // c == true
(还应该注意&
和|
也适用于布尔表达式。)
那么,为什么&&
和||
存在,而不是^^
?
如果您考虑&
和&&
之间的区别,那么解释就很明显。
第一个(&
)不会short-circuit评估,而&&
会进行评估。从逻辑上讲,^^
对应于^
的短路版本。但是,^
无法短路(无论第一个操作数的评估结果如何,第二个操作数都需要进行评估),因此^^
将完全冗余。
答案 3 :(得分:2)
^
是布尔逻辑异或(
答案 4 :(得分:1)
答案 5 :(得分:1)
方式去
boolean xor = a ^ b;
答案 6 :(得分:0)
你可以做到很久。这是一个逻辑XOR。
!(p && q) && (p || q)
答案 7 :(得分:0)