为什么在每个if和if-else块中都有一个return语句,但我会得到一个丢失的return语句错误



我在这里尝试在flower1和flower2中执行的操作,一个是偶数,一个为奇数,然后返回true。如果两者均为偶数,则返回false。如果两者都是奇数,则返回false。当我的代码是:

public class OppositesAttract {
public static boolean isLove(final int flower1, final int flower2) {

if(flower1%2==0 && flower2%2==0){
return false;
}else
if(flower1%2!=0 && flower2%2!=0){
return false;
} else
if(flower1%2==0 || flower2%2==0){
return true;
}
}

}

我得到了一个";缺少返回语句";错误所以我补充道:

public class OppositesAttract {
public static boolean isLove(final int flower1, final int flower2) {

if(flower1%2==0 && flower2%2==0){
return false;
}else
if(flower1%2!=0 && flower2%2!=0){
return false;
} else
if(flower1%2==0 || flower2%2==0){
return true;
}else{
return true;
}
}

}

现在,代码可以工作了,但我不明白为什么必须添加额外的return语句。

编译器不知道前三个术语涵盖所有情况。

if(flower1%2==0 && flower2%2==0){
return false;
} else if(flower1%2!=0 && flower2%2!=0){
return false;
} else if(flower1%2==0 || flower2%2==0){
return true;
} 

对你来说,这意味着:所有选项都包含在内。但编译器只看到:

if (somethingThatMayBeTrue) {
} else if (somethingElseThatMayBeTrue) {
} else if (aThirdThingThatMayBeTrue) {
} .... and what if none of them are?

你可能知道最后一个else-if应该总是真的(因为你知道它们并不都是不均匀的(,但编译器通常不会试图理解你的代码。

在您的情况下,最后一个子句(aThirdThingThatMayBeTrue,flower1%2==0|flower2%2==0(实际上是(somethingThatIsAlwaysTrueIfPreviousTermsAreFalse(。

所以你可以这样对待它:

if(flower1%2==0 && flower2%2==0){
return false; 
} else if(flower1%2!=0 && flower2%2!=0){
return false; 
} else {
return true; 
} 

相关内容

最新更新