【发布时间】:2018-07-03 03:07:32
【问题描述】:
我编写了一个程序来尝试解决 8 个皇后问题,其中一部分要求我测试所有的正向和反向对角线以确保没有冲突。我让后退完美地工作,但前锋的这一部分在我测试时恢复了真实,我真的不知道为什么。非常感谢您的帮助:)
class NonAttackingQueen {
static char [][] board = { {'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'},
{'X','Q','X','X','X','X','X','X'},
{'Q','X','X','X','X','X','X','X'},
{'X','X','X','X','X','X','X','X'} };
public static boolean diagonalsClear () {
int numQueens;
boolean clear = true;
for (int numSpots = 1; numSpots < 9; numSpots++) {
numQueens = 0;
for (int row = 0; row < numSpots - 1; row++) {
if (board[row][numSpots - 1 - row] == 'Q')
numQueens++;
}
if (numQueens > 1) {
clear = false;
break;
}
}
for (int numSpots = 7; numSpots > 0; numSpots--) {
numQueens = 0;
for (int row = 7; row > 7 - numSpots; row--) {
if (board[row][15-row-numSpots] == 'Q')
numQueens++;
}
if (numQueens > 1) {
clear = false;
break;
}
return clear;
}
}
【问题讨论】:
-
首先,初始化变量
int numQueens=0的好习惯;其次,isDiagonalsClear() 遵循 Java 的 bool-returning 函数约定。 -
如果您将 ifs (numQueens > 1) 更改为返回 false 而不是写入变量,它应该可以正常工作。我认为在你的情况下 clear 在第二个循环中被覆盖。
标签: java arrays bluej diagonal