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改成else时,这个问题就解决了。但为什么,当我使用else if时,会出现这种错误呢?” 首先,我建议你检查一下 if , else ,和 else if 因为理解分支如何工作是编写正确运行的代码所需的核心知识。 当你使用 else if 是因为 else if 仅当 else if 块计算结果为true。因此java编译器发现有一种情况,即没有一个块被执行(因此 if 也不是 else if 阻止执行)。这意味着在这种情况下 return 语句被执行。这违反了方法的签名,即该方法总是返回 int . 现在,当您更改 else if 到一个 else 因为 else 如果前面的 if (或 else if s) 街区还没走。
这个 int 之后 public 指示返回类型。必须从此方法返回该类型的内容,因为java是强类型语言。当你使用 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.
6条答案
按热度按时间goqiplq21#
如果不满足任何条件(即
x == y
)? 方法将返回什么?所以您需要返回一个默认值:使用单个
return
:“我知道当我把else改成else时,这个问题就解决了。但为什么,当我使用else if时,会出现这种错误呢?”
首先,我建议你检查一下
if
,else
,和else if
因为理解分支如何工作是编写正确运行的代码所需的核心知识。当你使用
else if
是因为else if
仅当else if
块计算结果为true。因此java编译器发现有一种情况,即没有一个块被执行(因此if
也不是else if
阻止执行)。这意味着在这种情况下return
语句被执行。这违反了方法的签名,即该方法总是返回int
. 现在,当您更改else if
到一个else
因为else
如果前面的if
(或else if
s) 街区还没走。c9qzyr3d2#
理解你的代码逻辑。有没有一种情况
if
条件不满足?是的,这是可能的(即x==y
)在这种情况下,函数不返回任何东西。对于这种情况,您需要在函数中有默认的返回值,您错过了这个值,编译器正在抱怨。xxe27gdn3#
那么当x==y时会发生什么呢?你还回什么?
你的方法被定义为返回一个int,但是当x==y时它没有返回任何东西。
你本可以写的
另外,注意x或y是zeor。假设x=1,y=0。你认为会发生什么?
evrscar24#
其他响应者都没有注意到的是,您的方法签名需要返回类型:
这个
int
之后public
指示返回类型。必须从此方法返回该类型的内容,因为java是强类型语言。当你使用else
在一个if
它将捕获其他条件未捕获的所有情况。lvjbypge5#
现在有一种可能性,你的函数不返回任何东西。例如,如果x=y,那么
(x > y)
也不是(x < y)
这是真的。因为函数只有在x>y和y>x时定义的返回语句,所以它不会在所有情况下都返回。解决此问题的一种方法是在if语句之后添加默认的return语句:
b91juud36#
在这种情况下,代码不返回值。i、 e.如果两者都不是,如果或
else if
满足条件。因此,编译器会标记一个错误。如果你有
else
而不是else if
,编译器确定在这两种情况下都返回一个值。这就是为什么它是好的。另请注意,“所有案件都包括在内”是不够的。例如,如果将else if改为
从技术上讲,所有的情况都包括在内(除了同时进行的修改)。不过,编译器要知道这一点并不容易,它会标记一个错误。
编译器确保返回值的唯一方法是
else
或者return
超出if条件。