【发布时间】:2017-01-19 10:01:36
【问题描述】:
我是 Java 新手,我正在制作 TicTacToe 的扩展版本(基本上它与通常的 3x3 版本的不同之处在于游戏区域的大小 - 它可能是 4x4、5x5 等等,玩家必须赢得连续几次获得最终胜利等。用户可以自定义他的游戏)。 我有一些检查方法。
//1.对于行:
boolean checkHorizontal(String[][] field) {
boolean valid = true;
for (int i = 0; i < field.length; i++) {
for (int j = 1; j < field[i].length; j++) {
if (!field[i][0].equals(field[i][j]) && !field[i][0].equals("[ ]")) {
valid = false;
}
}
}
return valid;
}
//2.对于列:
boolean checkVertical(String[][] field) {
boolean valid = true;
for (int i = 0; i < field.length; i++) {
for (int j = 1; j < field[i].length; j++) {
if (!field[0][i].equals(field[j][i]) && !field[0][i].equals("[ ]")) {
valid = false;
}
}
}
return valid;
}
//3. '\' 和 '/' 对角线的两种方法:
boolean checkDiagonal(String[][] field) {
boolean valid = true;
for (int i = 0; i < field.length; i++) {
if (!field[0][0].equals(field[i][i]) && !field[0][0].equals("[ ]")) {
valid = false;
}
}
return valid;
}
boolean checkAnotherDiagonal(String[][] field) {
boolean valid = true;
for (int i = 0, j = field.length - 1; i < field.length; i++, j--) {
if (!field[0][field.length - 1].equals(field[i][j]) && !field[i][0].equals("[ ]")) {
valid = false;
}
}
return valid;
}
问题出在这里。对于 empty 字段或字段,例如:
{"[ ]", " X ", "[ ]"},
{"[ ]", " X ", "[ ]"},
{"[ ]", " X ", "[ ]"}
checkHorizontal(String[][] field) 的结果是true。这意味着有比赛,但他们没有。 checkVertical(String[][] field) 和以下字段也是如此:
{"[ ]", "[ ]", "[ ]"},
{" X ", " X ", " X "},
{"[ ]", "[ ]", "[ ]"}
我将这些方法合二为一:
boolean validate(String[][] field) {
boolean valid = false;
if (checkHorizontal(field)
|| checkVertical(field)
|| checkDiagonal(field)
|| checkAnotherDiagonal(field)) {
valid = true;
}
return valid;
}
但由于问题,程序无法正常运行。
我不知道如何解决这个问题。还有其他更好的方法来检查二维数组的行、列和对角线吗?也许,有一些方法可以通过一种通用方法来做到这一点?
【问题讨论】:
标签: java validation multidimensional-array tic-tac-toe