交换if语句

时间:2010-10-31 08:18:38

标签: java if-statement minimize

我正致力于代码最小化和增强。我的问题是:是否可以在不破坏代码逻辑的情况下交换上面的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语句都不是写变量的操作,我会说是,但我不确定。

有什么想法吗?

5 个答案:

答案 0 :(得分:10)

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

为什么不去

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

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

路线

作为一个注释,在任何地方切换c1 c2都没有任何惩罚或优势。在上述情况中,首先放置最可能失败的条件会稍微提高效率,因为如果第一个条件失败,则不会评估第二个条件。

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

第三个注意事项,如果你的程序没有做任何其他事情,并且如果这个条件不成立则退出,并且你真的想要微优化(你没有),我建议不要在你之前解析参数知道他们是需要的。如果c1大部分时间都不等于c2,那么你可以等到解析c3,直到你知道你必须检查它。这是严格的理论。不要在实践中这样做,因为它会使你的代码更难阅读。如果可以的话,将所有命令行变量处理成合理的东西要清楚得多。

答案 1 :(得分:3)

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

if (c2 == c1 && c1 != c3 ) {
   ...
}

答案 2 :(得分:1)

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

答案 3 :(得分:1)

如果你的意思是

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

并且您不打算仅在c2-c1==0然后是的时候做一些特别的事情。

答案 4 :(得分:1)

如果没有涉及其他阻止,那么我建议你把它写成:

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

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

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