【问题标题】:Complicated if else logic in Java [closed]Java中的if else逻辑复杂[关闭]
【发布时间】:2014-12-31 04:14:17
【问题描述】:

我有 三个 if 语句:

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

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

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

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

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

【问题讨论】:

  • 它是一种类型。 jsut b 就可以了
  • 如果满足if中的任何一个,是否会执行相同的逻辑?
  • 那么,使用|| 来参与您所有ifs 的评估。除此之外,我不会说这是复杂的if-else 逻辑。
  • 我首先想到的是使用德摩根定律。而不是if (!(a == 0 && b == 0)),写if (a != 0 || b != 0)。这将使发生的事情更清楚,特别是如果你写错了......这将是正确的,除非 ab 都是 0。
  • 如果{...} 中执行的逻辑相同,那么测试完全是多余的,因为如果 a == 0 或 b == 0 或 a != 0 或 b != 将执行代码0

标签: java logic logical-operators control-flow


【解决方案1】:
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 个条件都完全不同,这只有在您愿意执行 if 时才有效

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

自己验证所有案例

(z = 零, n = 非零, a, b 变量, r = 结果, T = true, F = false)

【讨论】:

  • 用真值表很好的解释:)
  • 我认为您实际上回答的问题与 OP 的意图完全不同。要么你误解了这个问题,要么我有。无论如何,我想这就是它被关闭的原因。
  • 我认为 OP 想要使所有三个条件 AND 并得出一个更简单的条件
【解决方案2】:

最简单的表达方式:

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;   
}

【讨论】:

  • 但在问题中,ab 都是 int,而不是 boolean
  • @DavidWallace Jon 指的是boolean aboolean b 参数。
  • @LuiggiMendoza 你现在呢?
  • @DavidWallace 是的,这是解决方案的一般形式 - 我想将其转换为您可能想到的任何特定布尔表达式并不难
【解决方案3】:

只是为了重新提出您的问题。你说如果一个街区运行,其他街区不应该。所以当你写的时候

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 ... 
}

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

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多