Mat*_*t C 9 java loops return break conditional-statements
背景:我正在制作国际象棋比赛.它几乎完全正常工作,只是错过了对将军的检查,但是我正在改进一些代码以便于阅读等等.
现在,我正在重新编码一种方法,我必须检查从任何一块到另一个位置的路径.如果有一个块阻塞路径则返回true,如果没有阻塞路径则返回false.
注意:我不需要检查最后一个位置的位置,因为我的游戏会检查以确保您没有占据您想要移动的位置.
还要注意我已经研究过这个问题,我发现主要是在这里达成的共识是,破解是正确的解决方案.这比在循环外部初始化布尔变量并设置为true或false并打破该值的循环更受欢迎.但是,我的循环中有两个条件可能会使我的代码返回true或返回false,所以我不能完全这样做.
现行守则
public boolean isPathClear(Location l1, Location l2) {
int atx = l1.getX();
int aty = l1.getY();
int xdiff = 0, ydiff = 0;
int endx = l2.getX(), endy = l2.getY();
if(l1.getX() > l2.getX()) {
xdiff = 1;
}
if(l1.getX() < l2.getX()) {
xdiff = -1;
}
if(l1.getY() > l2.getY()) {
ydiff = 1;
}
if(l1.getY() < l2.getY()) {
ydiff = -1;
}
while(true) {
atx += xdiff;
aty += ydiff;
if(atx == endx && aty == endy) {
return true
}
if(board[atx][aty].getType() != ' ') {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:由于破坏是首选方法,这就是我打算做的.但是,我遇到了一个问题,如果我在其中一个if语句中使用break,看起来我必须返回另一个.喜欢:
while(true) {
atx += xdiff;
aty += ydiff;
if(atx == endx && aty == endy) {
break;
}
if(board[atx][aty].getType() != ' ') {
return false;
}
}
return true;
Run Code Online (Sandbox Code Playgroud)
问题: 这似乎是一种令人困惑的混合.所以根据我的情况,这仍然是这段代码的首选方法:
boolean clear;
while(true) {
atx += xdiff;
aty += ydiff;
if(atx == endx && aty == endy) {
clear = true;
break;
}
if(board[atx][aty].getType() != ' ') {
clear = false;
break;
}
}
return clear;
Run Code Online (Sandbox Code Playgroud)
大多数情况下,我会说这是一个主观的事情。
最后一个代码示例的一个客观优势是,它为您提供了方法的单点退出点,这对于调试通常很有用。曾经和我一起工作的一个做军事软件的人曾说过,这是他们必须努力实现的要求:一个方法必须只有一个出口点。他声称这是一个稳健性/可靠性/可维护性的事情。我只是喜欢那种简单的“这就是它离开的地方”的感觉。
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |