java中的逻辑表达式

时间:2011-02-21 20:21:04

标签: java

所以在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();
}

因此,如果两者都被选中,并且如果我单击按钮。框架不应该丢弃。它应该只在选择其中任何一个时处理。

8 个答案:

答案 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)