1

在编码 bat Logic-2 时,我输入了下面列出的第一种方法中的 loneSum 问题。它适用于所有测试,除了只有一个。它唯一失败的地方是所有变量都等于同一个整数。但是当我在网上查找解决方案时,我得到了下面列出的第二种方法,并且有效。我认为我的方法和正确解决方案之间的唯一区别是“else if(a==b && b==c){return 0;}”的位置。我的问题是条件的顺序对“if else”语句很重要吗?(我提前为措辞道歉,英语不是我的第一语言。谢谢。)

 public int loneSum(int a, int b, int c) {
      int sum = a + b + c;
      if(a==b)
      {return c;}
      else if(b==c)
      {return a;}
      else if(c==a)
      {return b;}
      else if(a==b && b==c)
      {return 0;}
      else
      return sum;
    }

public int loneSum(int a, int b, int c) {
  int sum = a + b + c;

if(a==b && b==c)
  {return 0;}
  else if(b==c)
  {return a;}
  else if(c==a)
  {return b;}
  else if(a==b)
  {return c;}
  else
  return sum;
}
4

6 回答 6

3

是的,条件的顺序很重要。在您的代码中,您if(a==b)首先进行测试。如果所有 3 个整数都相同,那么这将是true并且只会return c;执行。它甚至不会打扰其他条件。

ifelse-if中,所有条件仅按顺序评估,直到true找到第一个条件。

首先测试更具体的情况,即if(a==b && b==c)首先。

于 2013-05-06T20:45:49.647 回答
2

当然这很重要。

看看这个代码片段:

if (a) {
    doA();
} else if(a && b) {
   doAB();
}

比较:

if (a && b) {
    doAB();
} else if(a) {
   doA();
}

让我们假设两者ab都是true

在第一种情况下doA()将被调用,因为我们a首先测试。在第二种情况下doAB()将被执行。

于 2013-05-06T20:48:21.213 回答
1

简单示例,2 个相同的方法,只是 if else 语句的顺序不同:

String method1(int input) {
    if (input > 1) {
        return "Foo";
    } else if (input > 5) {
        return "Bar";
    }
    return "Baz";
}

String method2(int input) {
    if (input > 5) {
        return "Bar";
    } else if (input > 1) {
        return "Foo";
    }
    return "Baz";
}

使用输入调用这两种方法,比如说 9。你认为它们会返回相同的字符串吗?

于 2013-05-06T20:46:07.297 回答
0

提示:如果a == 1和怎么b == 1c == 1

剧透:你的代码返回 1,而结果应该是 0。

于 2013-05-06T20:45:44.573 回答
0

请记住,if/else-if/else 按顺序执行,并在找到可接受的情况时停止。在您的示例中,如果应该返回 0 a=5, b=5, c=5,您将返回。c

这是因为a==b并且a==b && b==c不是相互排斥的——它们都可以是真的,所以顺序很重要。如果您先检查a==b,您将永远无法进行更复杂的检查。您需要从最具体的检查转到最不具体的检查。

于 2013-05-06T20:46:19.797 回答
0

是的,因为如果满足第一个 if 中的条件,它会执行满足的 if 条件中的语句,并且不关心它下面的 if else 语句。

于 2013-05-06T20:47:30.383 回答