有一个人在StackOverflow问了一个问题,这个问题是他在面试的时候面试官给他提的问题。这个问题是:给定三个布尔变量a、b、c,如果其中至少有三分之二的变量是真的话,就返回真。下面是他的解决方法:
boolean atLeastTwo(boolean a, boolean b, boolean c) {
if ((a && b) || (b && c) || (a && c)) {
return true;
} else {
return false;
}
}
然后面试官让他改进这个解法使得其更为简洁。但是他不知道如何改进,所以他把这个问题贴在StackOverflow上。有一些人给出了非常有用的解法。我认为这值得我们讨论,以此来使我们在编程中对布尔值和布尔表达式有更深的理解。这里分享其中一些解决方法。
有人说如果你有如下代码段,
if (someExpression) {
return true;
} else {
return false;
}
那你应该修改为:
return someExpression;
所以这个解法可以改进为:
return ((a && b) || (b && c) || (a && c));
当然还有其他非常好的答案,如Tim Stone给出的答案:
return a ^ b ? c : a
个人认为这是最简洁的一种解法了。
我们也可以用卡诺图来做:
return a ? (b || c) : (b && c);
如果我们给布尔值设定为0和1(真为1),那我们有:
a&b | b&c | c&a
a + b + c >= 2
然而如果我们不能把布尔值设定为0和1,那么我们可以有:
int howManyBooleansAreTrue =
(a ? 1 : 0)
+ (b ? 1 : 0)
+ (c ? 1 : 0);
return howManyBooleansAreTrue >= 2;
还有一个更好的方法:
(a==b) ? a : c;
你也想亲自试一试吗?请把你的答案贴在下面。
【翻译自: http://www.pixelstech.net/article/1335793772-A-boolean-value-interview-question】
探讨并分享了简化复杂布尔逻辑表达式的方法,通过改进示例代码,展示了多种优化技巧,包括直接返回条件表达式、使用三元运算符、卡诺图分析等,旨在提高代码效率与可读性。
16万+

被折叠的 条评论
为什么被折叠?



