每日一练50——Java异或(xor)逻辑运算符(8kyu)

2018-07-19  本文已影响0人  砾桫_Yvan

题目

在一些脚本语言如PHP,存在一个逻辑运算符(例如&&,||,and,or,等)中有一种是“异或”运算符。如果两个表达式中只有一个为真,则返回true ,否则返回false。例如:

false xor false == false // since both are false
true xor false == true // exactly one of the two expressions are true
false xor true == true // exactly one of the two expressions are true
true xor true == false // Both are true.  "xor" only returns true if EXACTLY one of the two expressions evaluate to true.

任务

由于我们无法在Javascript中定义关键字(好吧,至少我不知道该怎么做),你的任务是定义一个函数xor(a, b),其中a和b是要评估的两个表达式。您的xor函数应具有上述行为,如果两个表达式中只有一个计算为true,则返回true,否则返回false。

测试用例:

import static org.junit.Assert.*;
import org.junit.Test;

public class XORTest {

    private static void testing(boolean actual, boolean expected) {
        assertEquals(expected, actual);
    }
    
    @Test
    public void testBasic() {
        System.out.println("Testing basics.");
        testing(XOR.xor(false, false), false);
        testing(XOR.xor(true, false), true);
        testing(XOR.xor(false, true), true);
        testing(XOR.xor(true, true), false);
    }
    @Test
    public void testNested() {
        System.out.println("Testing nested calls.");
        testing(XOR.xor(false, XOR.xor(false, false)), false);
        testing(XOR.xor(XOR.xor(true, false), false), true);
        testing(XOR.xor(XOR.xor(true, true), false), false);
        testing(XOR.xor(true, XOR.xor(true, true)), true);
        testing(XOR.xor(XOR.xor(false, false), XOR.xor(false, false)), false);
        testing(XOR.xor(XOR.xor(false, false), XOR.xor(false, true)), true);
        testing(XOR.xor(XOR.xor(true, false), XOR.xor(false, false)), true);
        testing(XOR.xor(XOR.xor(true, false), XOR.xor(true, false)), false);
        testing(XOR.xor(XOR.xor(true, true), XOR.xor(true, false)), true);
        testing(XOR.xor(XOR.xor(true, XOR.xor(true, true)), XOR.xor(XOR.xor(true, true), false)), true);
    }
}

解题

My

Java有异或^运算符。注释的方法也可以。

public class XOR {
    
    public static boolean xor(boolean a, boolean b) {
//         return ( !a && b) ||(a && !b);
        return a^b;
    }
}

Other

聪明的:

public class XOR {
    
    public static boolean xor(boolean a, boolean b) {
        return a!=b;
    }
}
public class XOR {
    
    public static boolean xor(boolean a, boolean b) {
        return !(a==b);
    }
}

后记

还好Java有异或^。

上一篇下一篇

猜你喜欢

热点阅读