提问人:mohammad mohammadi 提问时间:3/24/2022 更新时间:3/25/2022 访问量:218
交叉匹配 2D 阵列
cross match 2d array
问:
尝试实施更大规模的井字游戏
此游戏可以有 3 行以上的行和列
每当发现 4 个连续模式(水平、垂直或交叉)时
玩家是赢家
我已经找到了水平和垂直数学的实现
但找不到一种方法来识别 2D 数组中某个字符的交叉模式
请考虑以下二维数组
`
char[][] char2d={
{'*','o','o','*'},
{'o','*','o','o'},
{'o','o','*','o'},
{'o','o','o','*'}
}
`
如何检查“*”字符在此 2D 数组中是否有四个连续的十字图案
答:
0赞
tucuxi
3/24/2022
#1
如果给定的起始位置是长度充满字符的向下对角线(如图所示,从左向右推进),则此函数返回。true
s
c
public static void isFullDownDiagonal(char[][] board,
int startCol, int startRow, int s, char c) {
for (int i=0; i<s; i++) {
if (board[startRow+i][startCol+i] != c) return false;
// \_ change this sign to test up diagonal
}
return true;
}
只需稍作更改,即可测试向上的对角线。在棋盘中,左上角和下角的区域只能有对角线的起点。NxN
(N-s+1)x(N-s+1)
0赞
Oboe
3/24/2022
#2
您可以使用来检查对角线是否只有:IntStream
'*'
public static boolean checkDiagonals(char[][] arr) {
int dimension = arr.length;
return IntStream.range(0, dimension)
.allMatch(i -> arr[i][i] == '*')
|| IntStream.range(0, dimension)
.allMatch(i -> arr[i][dimension - i - 1] == '*');
}
0赞
Idle_Mind
3/25/2022
#3
另一个...
public static void main(String[] args) {
char[][] char2d={
{'*','o','o','*'},
{'o','*','o','o'},
{'o','o','*','o'},
{'o','o','o','*'}
};
System.out.println(hasCross(char2d, '*'));
}
public static boolean hasCross(char[][] board, char c) {
// Assumes a SQUARE board!
boolean crossA = true;
boolean crossB = true;
for(int col=0, rowA=0, rowB=(board.length-1); col<board.length; col++, rowA++, rowB--) {
if (board[rowA][col]!=c) {
crossA = false;
}
if (board[rowB][col]!=c) {
crossB = false;
}
}
return crossA || crossB;
}
评论