您的位置:首页 > 其它

if~else 语句再认识

2009-02-27 16:42 429 查看
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


最近在看手机版连连看游戏源代码,在改进其中一些方法时涉及到了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的话,编译器就假设认为,所有的情况没有列举完(虽然自己是把所有的情况包括了,但是编译器是假定程序员很笨的前提下设计的)所以才会出现上面的情况,分享一下!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: