制作一个 connect4 游戏,所以这只是逻辑的一部分 - 没有浮动块,没有无效字母(块 - 只有 R 和 Y 可接受)'。代表一个空白。
boolean arrayCheck = false;
do {
for (int j = 0; j < connect4Board[0].length; j++) {
for (int i = 0; i < connect4Board.length - 1; i++) {
if ((connect4Board[i][j] == 'R') || (connect4Board[i][j] == 'Y')) {
if ((connect4Board[i + 1][j] == '.') || (connect4Board[i + 1][j] == 0)) {
return arrayCheck; //makes sure a gap underneath is not present and seen as a floating piece
}
else if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y')) {
i++;
}
}
else if ((connect4Board[i][j] == '.') || (connect4Board[i][j] == 0)) {
if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y') || connect4Board[i + 1][j] == '.' || (connect4Board[i + 1][j] == 0)) {
i++;
} else {
return arrayCheck;
}
}
else if((connect4Board[i][j] != 'R') && (connect4Board[i][j] != 'Y') && (connect4Board[i][j] != '.')) {
return arrayCheck; //where it all goes wrong. code bugs out and doesn't output anything (should output true or false) but the console just stays empty.
}
i--;
}
j++;
}
} while (arrayCheck);
我不知道问题是由于 do-while 循环还是 if 语句本身。我试图将 if 语句放在循环的开头、循环之外和结尾,但无论我把它放在哪里,问题似乎都是一样的。控制台保持空白(保持运行而不继续任何其他操作)。我应该怎么办?
回答1
1.检查是否有效空间
第一个 if 检查它是否是一个有效的空间,如果不是,它将返回 false 并作为结果结束循环。
2.检查浮片
然后您可以检查它们是否有效
最后你有 i--;
你需要这样做吗?
i++
或 i--
或两者都不是?因为您已经为每个嵌套的 if 递增。
调试
为了帮助调试您的代码,请尝试使用 System.out.println(i);
Notice 打印 i 会发生什么情况。循环是否创建了无限循环?
例子
我将数组创建为:
char[][] connect4Board = {{'R','.','.','.','.'},{'T','.','.','.','.'},{'R','.','.','.','.'},{'R','.','.','.','.'}};
这可能是计数器 i 是如何递增的吗?这对我有用..
boolean arrayCheck = false;
do {
for (int j = 0; j < connect4Board.length; j++) {
for (int i = 0; i < connect4Board.length - 1; i++) {
/*1. Check if valid space*/
if ((connect4Board[i][j] != 'R') && (connect4Board[i][j] != 'Y') && (connect4Board[i][j] != '.'))
return arrayCheck;
/*2. Check for floating piece*/
if ((connect4Board[i][j] == 'R') || (connect4Board[i][j] == 'Y'))
if ((connect4Board[i + 1][j] == '.') || (connect4Board[i + 1][j] == 0))
return arrayCheck;
else if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y'))
i++;
if ((connect4Board[i][j] == '.') || (connect4Board[i][j] == 0))
if ((connect4Board[i + 1][j] == 'R') || (connect4Board[i + 1][j] == 'Y') || connect4Board[i + 1][j] == '.' || (connect4Board[i + 1][j] == 0))
i++;
else
return arrayCheck;
//Do you need to increment?
// i++; Or i--;
}
j++;
}
} while (arrayCheck);
return true;
}