【发布时间】:2014-01-08 09:34:01
【问题描述】:
背景:我正在做一个国际象棋游戏。它几乎可以完全工作,只是缺少对将死的检查,但我正在改进一些代码以提高可读性等。
现在,我正在重新编写一种方法,我必须检查从任何一块到板上另一个位置的路径。如果有一块挡住路径,则返回 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;
}
}
问题:由于打破是首选方法,这就是我计划做的。但是,我遇到了一个问题,如果我在其中一个 if 语句中使用 break,看起来我必须在另一个中返回。喜欢:
while(true) {
atx += xdiff;
aty += ydiff;
if(atx == endx && aty == endy) {
break;
}
if(board[atx][aty].getType() != ' ') {
return false;
}
}
return true;
问题: 这似乎是一种可能令人困惑的混合。所以在我的情况下,这仍然是这段代码的首选方法吗:
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;
【问题讨论】:
-
我根本不会使用
while (true),但我认为我是少数。 :-) -
你能展示你的整个方法吗?代码应该做什么?
-
这里有一个关于整个主题的很好的讨论:programmers.stackexchange.com/questions/118703/…>
-
我认为目标是一致性。我会做第一个或最后一个例子(第一个,我自己),但不是第二个。无论哪种方式,保持一致对读者更友好。
-
对于具有挑战性的智力开发,请选择最短且最易读的。这可能意味着:回报。这样的讨论对于你推动产生美好而有智慧的东西来说是浪费时间和精力。
标签: java loops return conditional-statements break