在else语句中,条件的顺序是否重要?

时间:2013-05-06 20:42:14

标签: java if-statement

在编码bat Logic-2时,我在下面列出的第一种方法中键入了loneSum问题。除了只有一个,所有测试都是正确的。它失败的唯一一个是所有变量都等于同一个整数。但是当我在线查找解决方案时,我得到了下面列出的第二种方法,并且有效。我认为我的方法和正确的解决方案之间的唯一区别是"否则如果(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;
}

6 个答案:

答案 0 :(得分:2)

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

ifelse-if中,只有在找到第一个true条件之前,才会按顺序评估所有条件。

首先测试更具体的案例,即首先if(a==b && b==c)

答案 1 :(得分: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.您认为它们会返回相同的字符串吗?

答案 2 :(得分:1)

当然这很重要。

看看这段代码:

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

比较:

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

我们假设ab都是true

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

答案 3 :(得分:0)

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

Spoiler:你的代码返回1,而结果应为0。

答案 4 :(得分:0)

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

这是因为a==ba==b && b==c不是互斥的 - 它们都可以是真的,因此顺序很重要。如果您首先检查a==b,则永远不会进行更复杂的检查。您需要从最具体的检查到最不具体的检查。

答案 5 :(得分:0)

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