我在这里尝试在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;
}