繁体   English   中英

布尔逻辑问题:我可以将这4个if语句强制转换为单个布尔语句吗?

[英]Boolean Logic question: can I coerce these 4 if statements into a single boolean statement?

我有一个布尔逻辑问题。 我有以下if语句应该可以合并为单个布尔表达式。 请帮忙。 我在此上花了太多时间,实际上我很too愧,无法问我的同事。

if (denyAll == true & allowOne == false) return false;
if (denyAll == true & allowOne == true) return true;
if (denyAll == false & allowOne == false) return false;
if (denyAll == false & allowOne == true) return true;
return true; //should never get here

我敢肯定有一个优雅的解决方案。

谢谢

return allowOne; 绝招?

我认为这仅仅是:

return allowOne;

denyAll值似乎无关紧要:

denyAll   allowOne   result
false     false      false
false     true       true
true      false      false
true      true       true

为了补充其他答案,一些基本技巧:

您可以使用if (allowOne)代替if (allowOne == true)if (!allowOne)代替if (allowOne == false)

另外,对于条件运算,通常应使用&&运算符而不是& ,因为这会导致短路。 例如,在表达式if (denyAll && !allowOne) ,如果denyAll为false,则因为表达式已经为false,所以它不会费心计算!allowOne

此外,如果您的方法像此处一样返回bool ,则通常可以将表达式简化为return语句本身。 例如:

if (!denyAll && allowOne)
   return true;
else
   return false;

简化为:

return (!denyAll && allowOne);

如何return allowOne; 如果一切都只是一个变量,并且读数没有副作用,那么结果应该相同。

看起来真正重要的价值是您的“ allowOne”布尔值(因为denyAlls的价值似乎无关紧要)。 假设您只是检查allowOne是否为true。

据我所知:

If allowOne = true then return true;
return false;

会做到这一点,“拒绝全部”设置似乎对结果没有任何影响,因此不应存在。

您可以使用如下形式:

if (denyAll && !allowOne) 
    return false;
return denyAll || allowOne;

不过,您应该考虑一些更具可读性的内容。

更新:正如其他人指出的那样(我还没有看到),您实际上忽略了denyAll all,因此return allowOne; 是你所需要的全部。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM