我正在尝试通过按特定顺序迭代游戏板中的几个条目来检查它们。现在我注意到的是,当我的junit测试调用该方法时,它被卡在第一个for循环中,不会继续下一个循环,只返回false,这意味着它跳到方法的末尾。当我运行一个只需要前3个循环的测试时,它就可以工作了,但是另一个测试需要第二个循环,它不会被执行。
问:为什么在没有检查其他循环的情况下就跳到了最后?
public boolean hasDiagonal(Mark m) {
for (int i = 0; i <= dimension-4; i++) {
for (int j = 0; j <= dimension-4; j++) {
for (int k = dimension-1; k == 3; k--) {
if (getField(i , j , k ) == m &&
getField(i+1, j+1, k-1) == m &&
getField(i+2, j+2, k-2) == m &&
getField(i+3, j+3, k-3) == m) {
return true;
//Stops here, if this part doesn't yield true,
//it returns false immediately
}
}
}
}
//This doesn't get checked
for (int i = dimension-1; i == 3; i--) {
for (int j = 0; j <= dimension-4; j++) {
for (int k = dimension-1; k <= 3; k--) {
if (getField(i , j , k ) == m &&
getField(i-1, j+1, k-1) == m &&
getField(i-2, j+2, k-2) == m &&
getField(i-3, j+3, k-3) == m) {
return true;
}
}
}
}
return false;
}发布于 2017-01-26 03:45:58
循环的条件部分应该是这里的问题所在-
for (int i = 0; i <= dimension-4; i++) {
for (int j = 0; j <= dimension-4; j++) {
for (int k = dimension-1; k == 3; k--)最里面的循环仅在dimension == 4时执行,因为循环中没有对此变量进行任何修改。
如果您执行j++或i++,同时检查i/j <= dimension(4)-4是否解析为i/j <= 0,最外层和第二个循环甚至不会迭代超过一次(该块将只执行一次)。
因此,循环当然需要更好地处理指定的维度和相应的修改条件。
发布于 2017-01-26 03:39:41
我怀疑您的循环条件中的i == 3和k == 3至少会导致您的问题。在这些条件下,除非为dimension == 4,否则循环将被跳过。
https://stackoverflow.com/questions/41860120
复制相似问题