检查三个布尔值中是否至少有两个为真

新手上路,请多包涵

一位面试官最近问了我这个问题:给定三个布尔变量 a、b 和 c,如果三个中至少有两个为真,则返回真。

我的解决方案如下:

 boolean atLeastTwo(boolean a, boolean b, boolean c) {
    if ((a && b) || (b && c) || (a && c)) {
        return true;
    }
    else{
        return false;
    }
}

他说这可以进一步改善,但如何改善?

原文由 user282886 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 697
2 个回答

而不是写:

 if (someExpression) {
    return true;
} else {
    return false;
}

写:

 return someExpression;


至于表达式本身,是这样的:

 boolean atLeastTwo(boolean a, boolean b, boolean c) {
    return a ? (b || c) : (b && c);
}

或者这个(你觉得哪个更容易掌握):

 boolean atLeastTwo(boolean a, boolean b, boolean c) {
    return a && (b || c) || (b && c);
}

它测试 ab 一次,并且 c 最多一次。

参考

原文由 polygenelubricants 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是为了使用 XOR 来回答一个相对直接的问题……

 return a ^ b ? c : a

原文由 Tim Stone 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题