我有这段代码:
public int Bol(int x, int y){
if(x > y){
return (x / y);
}else if(x < y){
return (y / x);
}
}
抛出此错误:“此方法必须返回int类型的结果”。为什么一定要这样?
我知道当我将else if
更改为else
时,此问题就解决了。但是,当我使用else-if时,为什么我收到此错误?
答案 0 :(得分:3)
当没有条件满足时(即x == y
时)会发生什么?该方法将返回什么?所以你需要返回一个默认值:
public int Bol(int x, int y){
if(x > y){
return (x / y);
}else if(x < y){
return (y / x);
}
return 0; // or whatever default value you need
}
使用单个return
:
public int Bol(int x, int y){
int result = 0; //whatever default value you want
if(x > y) {
result = (x / y);
} else if(x < y) {
result = (y / x);
}
return result;
}
“我知道,当我改变别的时候,否则这个问题就解决了。但是为什么,当我使用else-if时,我得到了这个错误?”
首先,我建议您了解if
,else
和else if
的工作原理,因为了解分支如何工作是编写正常运行代码所需的核心知识。
使用else if
时它不起作用的原因是因为else if
块中的代码只有在else if
块的布尔表达式求值为true时才会执行。因此,Java编译器发现存在执行块的 none 的情况(因此if
和else if
块都不会被执行。这意味着有一种情况,return
语句都没有被执行。这违反了方法的签名,该方法表明方法总是返回int
。现在,当您将else if
更改为else
时,您的代码就会正常工作,因为else
中的代码始终总是运行前面的if
(或else if
s)块没有运行。
答案 1 :(得分:2)
那么当x == y时会发生什么?你有什么回报?
您的方法被定义为返回int。 但是当x == y时它没有返回任何东西。
你可以写
if (x > y) {
return x/y;
} else if (x < y) {
return y/x;
} else {
return 1; // x == y therefore x/y is 1.
}
另外,请注意x或y是zeor的时候。假设x = 1且y = 0。您认为会发生什么?
答案 2 :(得分:1)
有一种情况是您的代码不返回值。 I.E.如果既不符合else if
条件,也不满足else
条件。因此,编译器会标记错误。
如果你有else if
而不是else if ( x <= y ) {
....
}
,编译器肯定会在两种情况下都返回一个值。这就是为什么它很好。
另请注意 - “覆盖所有案例”是不够的。例如,如果您将else if更改为
else
然后在技术上涵盖所有情况(并发修改除外)。但是,编译器知道这一点并不容易,它会标记错误。
编译器确定您具有返回值的唯一方法是 if condition 之外的return
或{{1}}。
答案 3 :(得分:0)
现在您的功能可能不会返回任何内容。
例如,如果x = y,则(x > y)
和(x < y)
都不为真。因为你的函数只有在x&gt;时定义的return语句。 y和当y> x,在所有情况下都不会返回。
解决此问题的一种方法是在if语句后添加默认的return语句:
public int Bol(int x, int y){
if(x > y){
return (x / y);
}else if(x < y){
return (y / x);
}
return 1;
}
答案 4 :(得分:0)
此时没有其他响应者注意到您的方法签名需要返回类型:
public int Bol(int x, int y){
int
之后的public
表示返回类型。您必须从此方法返回该类型的内容,因为Java是strongly typed language。当您在else
中使用if
时,它将捕获未被其他条件捕获的所有案例。
public int Bol(int x, int y){
if(x > y){
return (x / y);//returns a double, which can be cast to an int
}else if(x < y){
return (y / x); //returns a double, which can be cast to an int
}
} //if this line is reached, nothing is being returned, so the compiler throws an error.
答案 5 :(得分:0)
了解您的代码逻辑。是否会出现if
条件不满足的情况?是的,这是可能的(即当x==y
时)并且在那种情况下该函数不返回任何东西。对于这种情况,你需要在函数中有默认的返回值,你已经错过了,编译器正在抱怨。