我有一个连接四个“板”,它是一个6*7的二维字符数组,填充了空格X或o。当在垂直、水平或对角线上有四个X或四个Os在一行中时,满足win条件。我已经成功地检查了垂直和水平的win条件,其中win字符通过如下所示的一些方法返回:
private char CheckVerticalWinner(char[][] currentBoard) {
// check vertical (move down one row, same column)
char vWinner = ' ';
for (int col=0; col<7; col++) {
int vCount = 0;
for (int row=0; row<5; row++) {
if (currentBoard[row][col]!=' ' &&
currentBoard[row][col] == currentBoard[row+1][col]) {
vCount++;
System.out.println("VERT "+vCount); //test
} else {
vCount = 1;
}
if (vCount>=4) {
vWinner = currentBoard[row][col];
}
}
}
return vWinner;
}
private char CheckHorizontalWinner(char[][] currentBoard) {
// check horizontal (move across one column, same row)
char hWinner = ' ';
for (int row=0; row<6; row++) {
int hCount = 0;
for (int col=0; col<6; col++) {
if (currentBoard[row][col]!=' ' &&
currentBoard[row][col] == currentBoard[row][col+1]) {
hCount++;
System.out.println("HORIZ "+hCount); //test
} else {
hCount = 1;
}
if (hCount>= 4) {
hWinner = currentBoard[row][col];
}
}
}
return hWinner;
}
private char CheckDiagonalWinner(char[][] currentBoard) {
// some iteration here
return dWinner;
}
最简单的算法可能是:
for every direction
for every coordinate
check whether the next 3 elements in this direction exist and are the same
在代码中:
final int maxx = 7;
final int maxy = 6;
char winner(char[][] board) {
int[][] directions = {{1,0}, {1,-1}, {1,1}, {0,1}};
for (int[] d : directions) {
int dx = d[0];
int dy = d[1];
for (int x = 0; x < maxx; x++) {
for (int y = 0; y < maxy; y++) {
int lastx = x + 3*dx;
int lasty = y + 3*dy;
if (0 <= lastx && lastx < maxx && 0 <= lasty && lasty < maxy) {
char w = board[x][y];
if (w != ' ' && w == board[x+dx][y+dy]
&& w == board[x+2*dx][y+2*dy]
&& w == board[lastx][lasty]) {
return w;
}
}
}
}
}
return ' '; // no winner
}
问题内容: 如何在Java中连接两个数组? 问题答案: 使用Apache Commons Lang库 例如: 在Java 8中使用Stream: 或者像这样,使用flatMap: 为此,你必须使用反射:
问题内容: 我正在尝试检查2D数组中每个元素的相邻值,但是当我到达数组的边或角落时,得到了IndexOutOfBoundsException。例如,如果我的数组是: | 2 | 4 | 2 | 7 | 8 | | 8 | 1 | 0 | 5 | 6 | | 0 | 3 | 1 | 5 | 2 | | 1 | 9 | 7 | 2 | 0 | 我知道8的所有邻居都是7,5和6,但是我的陈述并没有正确检
我试图找出如何接受2个整数参数,一个初始整数称为“start”,另一个整数称为“destination”。我想使用我的方法中的两个参数,首先检查起始整数是否在矩阵中,然后检查目标整数是否与它周围的4个元素(north,east,south,west)相邻。 例1: 如果起始整数是(6),则检查目的整数(7)是否与起始整数相邻。如果是真的,那就做点什么。
案例2: 如何检查和以解决这些情况?
问题内容: 我需要为正在进行的项目制作一个相当大的二维数组的副本。我有两个2D阵列: 我也有两种方法来进行复制。我需要复制数组,因为当前会定期更新。 和 但是,这不起作用。如果我叫old,对current进行更新,然后再调用keepold,则current不等于原来的值。为什么会这样呢? 谢谢 问题答案: 或使两个数组引用相同的东西,因此,如果你随后修改,也会被修改。要将一个数组的内容复制到另一个
问题内容: 目前,我正在开发在8x8 2D阵列板上生成随机0和1的程序。我要做的是检查对角线上的所有数字是否都相同(从角开始,而不仅仅是对角线)。 例: 因此,如果偶然从左上角(0,0),(1,1)…(7,7)开始的所有数字均为0或1,那么我必须输出到扫描仪,指示“是0“的主要对角线(来自上面的示例)。 同样从该示例中,我们可以看到从右上角向左下角对角重复数字“ 1”,然后我还必须显示“有一个较小