Java中复杂的if else逻辑

时间:2014-12-31 04:14:17

标签: java logic logical-operators flow-control

我有 if语句:

if (!(a == 0 && b == 0)) {...}

if (!(a == 0 && b != 0)) {...}

if (!(a != 0 && b != 0)) {...}

我想将它们组合在一个代码块中,例如方法。

如果有人运行,我不希望其他语句运行。有一些解决方法,如果我想避免提出一些好的逻辑,但我想知道是否有一种漂亮的方式来编写它。

3 个答案:

答案 0 :(得分:5)

if (!(a == 0 && b b == 0)) {...}

真值表

a b r

z n T 
n n T 
z z F
n z T

if (!(a == 0 && b b != 0)) {...}

真值表

z n F
n n F 
z z T
n z T

if (!(a != 0 && b b != 0)) {...}

真值表

z n T
n n F
z z T
n z T

常见案例

n z T

所以对所有3个条件都有效的结果是

a != 0 && b == 0

请注意:所有3个条件都完全不同,只有在您执行

时才会执行此操作

(第一个&&&&第三个)是true

自己验证所有案例

(z = 0,n =非零,a,b变量,r =结果,T =真,F =假)

答案 1 :(得分:1)

最简单的表达方式:

public int foo(boolean a, boolean b) {
  int result;
  if (a) {
    if (b) { result = 1; }
    else { result = 2; }
  else {
    if (b) { result = 3; }
    else { result = 4; }
  return result;   
}

(注意这会分别评估a和b一次,这是你在这里可以期待的最小值)

为了让@DavidWallace满意,这里是对原始问题的特定形式的翻译:

public int foo(int a, int b) {
  int result;
  if (a==0) {
    if (b==0) { result = 1; }  // or whatever should happen, not specified in the question
    else { result = 2; }
  else {
    if (b==0) { result = 3; }
    else { result = 4; }
  return result;   
}

答案 2 :(得分:1)

重新说出你的问题。你说如果一个块运行,其他块不应该运行。所以当你写了

if (!(a == 0 && b == 0)) {...}

if (!(a == 0 && b != 0)) {...}

if (!(a != 0 && b != 0)) {...}

你的意思是

if (!(a == 0 && b == 0)) { 
     // first ...
}
else if (!(a == 0 && b != 0)) {
     // second ...
}
else if (!(a != 0 && b != 0)) { 
     // third ...
}

但这相当于

if (a != 0 || b != 0) { 
    // first ... 
}
else if (b == 0) { 
    // second ... 
}

请注意,第三个...永远无法运行,正如我在评论中所述。