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

2022-08-31 04:14:37

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

我的解决方案如下:

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

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


答案 1

而不是写:

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);
}

它测试一次,最多一次。abc

引用


答案 2

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

return a ^ b ? c : a