最近在看手机版连连看游戏源代码,在改进其中一些方法时涉及到了if/else语句,下面是一正确,一错误版本,与大家分享。
我先把错误的版本贴出来,大家看看错在哪里。
错误版本:
--------------------错误版本:--------------------------------
private boolean twoCornerHorizonalDirectionLeft(Point a, Point b) {
boolean hBooleanA=false;
boolean hBooleanB=false;
if (a.x== b.x && a.y == b.y) { // 四条边界的相同点判断
return false;
}
if ((a.y ==0)&&( b.y == 0)) { // 左边界判断
return true;
}
if( a.y == 0){ // A点靠边,判断B点是否有横线。
for (int y = b.y -1; y >=0; y--) {
if (map[b.x][y]!= 0) {
return false;
}
}
return true;// 全部为0
}// if( a.y = 0)
if(b.y==0){ // B点靠边,判断A点是否有横线。
for (int y = a.y -1; y >=0; y--) {
if (map[a.x][y]!= 0) {
return false;
}
}
return true;// 全部为0
}// if(b.y=0)
if(a.y!=0&&b.y!=0) {
for (int y = b.y -1; y >=0; y--) {
if (map[b.x][y]!= 0) {
return false;
}
}
hBooleanA=true;// 全部为0
for (int y = a.y -1; y >=0; y--) {
if (map[a.x][y] != 0) {
return false;
}
}
hBooleanB = true;// 全部为0
return hBooleanA && hBooleanB;
}// if( a.y!=0&&b.y!=0 )
} // twoCornerHorizonalDirectionLeft
--------------------错误版本:--------------------------------
我是在Eclipse中写的这段代码,可是写好后缺提示“此方法必须返回boolean类型的结果”,觉得很奇怪,以为是没有用else的原因,于是就把最后一个分支的判断改成else,结果人歪打正着,通过编译了。以下是错误版本:
private boolean twoCornerHorizonalDirectionLeft(Point a, Point b) {
boolean hBooleanA=false;
boolean hBooleanB=false;
if (a.x== b.x && a.y == b.y) { // 四条边界的相同点判断
return false;
}
if ((a.y ==0)&&( b.y == 0)) { // 左边界判断
return true;
}
if( a.y == 0){ // A点靠边,判断B点是否有横线。
for (int y = b.y -1; y >=0; y--) {
if (map[b.x][y]!= 0) {
return false;
}
}
return true;// 全部为0
}// if( a.y = 0)
if(b.y==0){ // B点靠边,判断A点是否有横线。
for (int y = a.y -1; y >=0; y--) {
if (map[a.x][y]!= 0) {
return false;
}
}
return true;// 全部为0
}// if(b.y=0)
else {
for (int y = b.y -1; y >=0; y--) {
if (map[b.x][y]!= 0) {
return false;
}
}
hBooleanA=true;// 全部为0
for (int y = a.y -1; y >=0; y--) {
if (map[a.x][y] != 0) {
return false;
}
}
hBooleanB = true;// 全部为0
return hBooleanA && hBooleanB;
}// if( a.y!=0&&b.y!=0 )
} // twoCornerHorizonalDirectionLeft
后来经过同事张恒的解释才知道,全写成if的话,编译器就假设认为,所有的情况没有列举完(虽然自己是把所有的情况包括了,但是编译器是假定程序员很笨的前提下设计的)所以才会出现上面的情况,分享一下!