题目
在一些脚本语言如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有异或^。
网友评论