在编码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;
}
答案 0 :(得分:2)
是的,条件的顺序很重要。在您的代码中,首先测试if(a==b)
。如果所有3个整数都相同,那么这将是true
并且仅执行return c;
。它甚至不会为其他条件而烦恼。
在if
和else-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();
}
我们假设a
和b
都是true
。
在第一种情况下,doA()
会被调用,因为我们首先测试a
。在第二种情况下,doAB()
将被执行。
答案 3 :(得分:0)
提示:如果a == 1
,b == 1
和c == 1
怎么办?
Spoiler:你的代码返回1,而结果应为0。
答案 4 :(得分:0)
请记住,如果/ else-if / else按顺序执行,并在找到可接受的情况时停止。在您的示例中,如果a=5, b=5, c=5
,当您返回0时,您将返回c
。
这是因为a==b
和a==b && b==c
不是互斥的 - 它们都可以是真的,因此顺序很重要。如果您首先检查a==b
,则永远不会进行更复杂的检查。您需要从最具体的检查到最不具体的检查。
答案 5 :(得分:0)
是的,因为如果满足第一个if中的条件,它会在满足if条件下执行语句,并且不必担心它下面的if else语句。