我有一个布尔逻辑问题。我有以下if语句应该能够合并为一个布尔表达式。请帮忙。我花了太多时间在这上面,我真的很惭愧地问我的同事。
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
我确信有一个优雅的解决方案。
由于
答案 0 :(得分:9)
return allowOne;
可以解决这个问题吗?
答案 1 :(得分:5)
我认为这只是:
return allowOne;
denyAll值似乎并不重要:
denyAll allowOne result
false false false
false true true
true false false
true true true
答案 2 :(得分:2)
补充其他答案,一些基本提示:
您可以使用if (allowOne)
代替if (allowOne == true)
或if (!allowOne)
代替if (allowOne == false)
此外,对于条件操作,您通常应使用&&
运算符而不是&
,因为这样可以实现短路。例如,在表达式if (denyAll && !allowOne)
中,如果denyAll
为false,则不会因为表达式已经为假而无法评估!allowOne
。
此外,如果您的方法返回bool
,那么您通常可以将表达式简化为return语句本身。例如:
if (!denyAll && allowOne)
return true;
else
return false;
简化为:
return (!denyAll && allowOne);
答案 3 :(得分:1)
return allowOne;
怎么样?如果一切都只是一个变量而且阅读没有副作用,那么它应该有相同的结果。
答案 4 :(得分:1)
看起来真正重要的是你的“allowOne”bool(因为denyAlls的值似乎并不重要)。假设,你只需检查allowOne是否为真。
答案 5 :(得分:0)
据我所见:
If allowOne = true then return true;
return false;
会这样做“拒绝所有”设置似乎对结果没有任何影响,不应该在那里。
答案 6 :(得分:0)
您可以使用以下内容:
if (denyAll && !allowOne)
return false;
return denyAll || allowOne;
然而,你应该考虑更具可读性的东西。
更新:
正如其他一些人指出的那样(以及我没有看到的)是,你实际上忽略了denyAll all,所以return allowOne;
就是你所需要的。