此If语句中有多少个组合

时间:2010-01-25 09:39:55

标签: c# math

好的 - 我和我一起工作的人写过像这样的东西

if()
   if()
      if()
         if()
         if()

我不喜欢这个!!

如果有十个不同的布尔标志,那里有多少个组合?

10阶乘?

我想解释为什么这很糟糕

4 个答案:

答案 0 :(得分:3)

2在10度= 1024

  

我想解释为什么这很糟糕

这可能不一定是坏事。每种情况都会导致一半案件被切断。如果您知道在第一个条件为真时您只需要做某事,那么您已经丢弃了512个案例。这就是那些检查的重点。

然而,您可以将其重写为更好看,更具可读性:

if(c1 && c2 && c3 && c4 && c5)

答案 1 :(得分:2)

每个标志有两个状态,10个标志表示2 ^ 10 = 1024

答案 2 :(得分:1)

出于这个原因,大多数优秀的静态代码分析器都有最大级别的缩进。处理具有如此高级别嵌套的所有逻辑情况变得非常困难。

这是在函数顶部检查一个大块中的所有错误条件的典型新手错误吗?

如果是这样,您可能希望让代码的作者将其更改为if语句序列而不是这个重度嵌套的构造。

if(error1) {
    /* report error 1 and exit */
}

if(error2) {
    /* report error 2 and exit */
}

if(error3) {
    /* report error 3 and exit */
}

...

使测试代码变得更加容易,并且提供有关特定错误的定制信息,而不是一个通用的“某些不好”的声明。

答案 3 :(得分:0)

最多2 ^ 10 = 1024个路径(如果条件完全独立,则达到最大值)

在一种方法中有许多路径被称为具有高复杂性。这种高复杂性会影响可维护性和可测试性。显然,复杂的方法更容易出错,更难以测试和维生素。

复杂性不一定是问题:问题的某些解决方案具有无法消除的固有复杂性。换句话说,一些问题确实很难找到解决方案。在这些情况下,您可以通过将复杂方法拆分为较小的方法来降低局部复杂性(这显然不会降低全局复杂性)。

在其他情况下删除额外的复杂性:找到一个更简单的解决方案(很容易说,我知道); - )

相关问题