2012-02-23 79 views
0
if((x == 5) || (x == 2)) { 
    [huge block of code that happens] 
    if(x == 5) 
     five(); 
    if(x == 2) 
     two(); 
} 

因此,我正在检查5或2.并且在5或2之后发生了一个巨大的代码块。问题是,然后我希望根据它是5还是2来做不同的事情。我不想为5或2个单独的条件代码(复制它很笨拙)。我也不喜欢我上面这样做,因为x其实很长。Java条件(检查条件内的第一个条件)

有没有办法这样说:

if((x == 5) || (x == 2)) { 
    [huge block of code that happens] 
    if(first conditional was true) 
     five(); 
    if(second conditional was true) 
     two(); 
} 

我总是可以做到这一点我上面做的方式。只是好奇,如果这样的选择存在。我能想到的

+6

我会用[巨大的代码块出现这种情况]更关心自己。我的第一个想法是“重构,任何人?” – duffymo 2012-02-23 23:52:03

+0

这让我很担心,回答这个问题的如此之多的重量并不关心这段代码中使用的if语句的数量。 – Shahzeb 2012-02-24 00:06:20

+0

我不是一个有经验的编码员。这是一个严重的问题(条件数)? – 2012-02-24 00:12:13

回答

2

一种方式基本上是“别名”长布尔在if条件表达式:

boolean expr1, expr2; 

if (expr1 = (x == 5) | expr2 = (x == 2)) { 
    // huge block of code that happens 
    if (expr1) five(); 
    if (expr2) two(); 
} 

我使用的非短路操作,以确保表达式2被分配。

+0

Soooo文化调理的许多年来对视线的畏缩...... :) – Affe 2012-02-23 23:55:10

+0

哈哈不错...非常内联,我挖 – sauce 2012-02-23 23:57:09

+0

优秀!!谢谢! – 2012-02-24 00:15:30

3

如果条件语句是大的,丑陋的,而且比x == 5漂亮得多,然后就存放在boolean结果:我能想到的

boolean xWasFive = x == 5; 
boolean xWasTwo = !xWasFive && x == 2; 
if (xWasFive || xWasTwo) { 
    ... 
    if (xWasFive) doA; 
    else if (xWasTwo) doB; 
} 
+0

嗯这是一个相当干净的解决方案 – 2012-02-24 00:05:01

0

唯一的事情是设置一个标志,这两个选项。的排序是这样的:

boolean wasFive = x == 5; 
boolean wasTwo = x == 2; 

if(wasFive || wasTwo) { 
    [huge block of code that happens] 
    if(wasFive) 
     five(); 
    if(wasTwo) 
     two(); 
} 
+3

'x == 5? true:false'完全等价于'x == 5'。 – 2012-02-23 23:58:21

+0

当然不会通过我的checkstyle/findbugs配置 – 2012-02-24 00:05:34

+0

@LouisWasserman - 你绝对正确,永远不会在实践中这样做。感谢代码审查,我编辑了我的答案! – sauce 2012-02-27 22:00:35

0

也许是这样的:

final boolean firstCondition = (x == 5); 
final boolean secondCondition = (x == 2); 

if (firstCondition || secondCondition) { 
    // code 
    if(firstCondition) { 
     // code 
    } 
    else if (secondCondition) { 
     // code 
    } 
}