【问题标题】:Swap if-statements交换 if 语句
【发布时间】:2010-10-31 08:18:37
【问题描述】:

我正在致力于代码最小化和增强。我的问题是:是否可以在不破坏代码逻辑的情况下交换上面的 if 语句?

    int c1 = Integer.parseInt(args[0]) ;
    int c2 = Integer.parseInt(args[1]) ;
    int c3 = Integer.parseInt(args[2]) ;

    if (c2-c1==0)
      if ( c1 != c3 )

由于这两个 if 语句之间没有写入变量的操作,我会说是,但我不确定。

有什么想法吗?

【问题讨论】:

  • 还涉及其他块吗?
  • && 加入这两个条件对于人类来说是最容易理解的。然而,java 编译器应该生成同样高效的代码。

标签: java if-statement minimize


【解决方案1】:

我真的不明白你为什么想要(c2 - c1 == 0) 而不是c1 == c2

为什么不去

if ((c1 == c2) && (c1 != c3)){
  do_stuff();
}

if ((c1 != c3) && (c1 == c2)){
  do_stuff();
}

路线

请注意,在任何地方将 c1 转换为 c2 都没有任何不利或优势。在上述情况中,将最有可能失败的条件放在首位会稍微高效一些,因为如果第一个条件失败,则不会评估第二个条件。

另外请注意,这是一个微优化,您永远不应该考虑速度。

第三点,如果您的程序不执行任何其他操作,并且在此条件不成立时退出,并且您确实想要进行微优化(您不这样做),我建议不要在您之前解析参数知道他们是需要的。如果 c1 在大多数情况下都不等于 c2,那么您可以等待解析 c3,直到您知道必须检查它。这是严格的理论。在实践中不要这样做,因为它会使你的代码更难阅读。尽快将所有命令行变量处理为合理的东西会更加清晰。

【讨论】:

    【解决方案2】:
    int c1 = Integer.parseInt(args[0]) ;
    int c2 = Integer.parseInt(args[1]) ;
    int c3 = Integer.parseInt(args[2]) ;
    
    if (c2 == c1 && c1 != c3 ) {
       ...
    }
    

    【讨论】:

      【解决方案3】:

      是的。 你也可以写if ((c2-c1==0) && (c1 != c3))

      【讨论】:

        【解决方案4】:

        如果你的意思是

        if ((c1 != c3) && (c2-c1==0))
        

        只有当c2-c1==0 是,你才打算做一些特别的事情。

        【讨论】:

          【解决方案5】:

          如果不涉及其他块,那么我建议你写成:

          if (c2-c1==0 && c1 != c3 )
          

          或者,如果你想交换它们,

          if (c1 != c3 && c2-c1==0)
          

          【讨论】:

            猜你喜欢
            • 2010-10-06
            • 2019-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多