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

发布于 12-01 01:21 字数 408 浏览 2 评论 0原文

我有一个布尔逻辑问题。我有以下 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

我确信有一个优雅的解决方案。

谢谢

I have a boolean logic question. I have the following if statements that should be able to be coalesced into a single boolean expression. Please help. I've spent way too much time on this and I'm actually too ashamed to ask my co-workers.

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

I'm sure there is an elegant solution.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

找回味觉2024-12-08 01:21:57

return allowedOne; 可以解决问题吗?

Would return allowOne; do the trick?

空气里的味道2024-12-08 01:21:57

我认为这只是:

return allowOne;

DenyAll 值似乎并不重要:

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

I think it's just:

return allowOne;

The denyAll value doesn't seem to matter:

denyAll   allowOne   result
false     false      false
false     true       true
true      false      false
true      true       true
请止步禁区2024-12-08 01:21:57

为了补充其他答案,一些基本提示:

您可以使用 if (allowOne) 而不是 if (allowOne == true)if (!allowOne)< /code> 而不是 if (allowOne == false)

另外,对于条件操作,您通常应该使用 && 运算符而不是 &< /code>,因为这允许短路。例如,在表达式 if (denyAll && !allowOne) 中,如果 denyAll 为 false,则不会费心评估 !allowOne,因为该表达式已经是错误的。

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

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

简化为:

return (!denyAll && allowOne);

To supplement the other answers, some basic tips:

you can use if (allowOne) instead of if (allowOne == true) or if (!allowOne) instead of if (allowOne == false)

Also, with conditional operations, you should typically use the && operator instead of &, as this allows short-circuiting. For example in the expression if (denyAll && !allowOne), if denyAll is false, it will not bother evaluating !allowOne since the expression is already false.

Furthermore, if your method is returning a bool as it is here, then you can often simplify the expression into the return statement itself. For example this:

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

simplifies to this:

return (!denyAll && allowOne);
梅窗月明清似水2024-12-08 01:21:57

返回allowOne;怎么样?如果一切都只是一个变量并且读取没有副作用,那么应该有相同的结果。

How about return allowOne;. If everything is just a variable and reading has no side effects, then that should have the same result.

起风了2024-12-08 01:21:57

看起来真正重要的值是您的“allowOne”布尔值(因为 DenyAlls 值是什么似乎并不重要)。假设,您只需检查allowOne 是否为真。

It looks like the value that really matters is your "allowOne" bool (since it doesn't seem to matter what denyAlls value is). Assuming that, you van just check if allowOne is true.

郁金香雨2024-12-08 01:21:57

据我所知:

If allowOne = true then return true;
return false;

“拒绝全部”设置似乎不会对结果产生任何影响,也不应该存在。

Well as far as I can see:

If allowOne = true then return true;
return false;

would do it the "Deny all" setting doesnt seem to have any effect on the outcome and should not be there.

你是年少的欢喜2024-12-08 01:21:57

你可以使用这样的东西:

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

尽管如此,你应该考虑更具可读性的东西。

更新:
正如其他一些人所指出的(我还没有看到的),您实际上忽略了 DenyAll all,因此 return allowedOne; 就是您所需要的。

You could use something like this:

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

Nevertheless you should consider something that is more readable.

Update:
As some others have pointed out (and what I haven't seen) is, that you actually ignore denyAll all, so return allowOne; is all you need.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文