在二维数组中查找数字的对角线?
Finding Diagonal of a number in 2D array?
如果我有以下 5x5 矩阵可以说
{ , , T , , }
{ , T , T , , }
{ , , T , , }
{ , T, , , }
{T, , , , }
而且我必须检查矩阵中的字符是否与另一个字符成对角线,我按以下方式检查它们,
public boolean isDiagonal(int row,int col){
if (row == board.length-1 && board[row-1][col+1] == 'T') {
return true;
} else if (col == board.length -1 && board[row+1][col-1] == 'T') {
return true;
} else if (board[row][col] == 'T' && board[row+1][col+1] == 'T' ||
board[row][col] == 'T' && board[row-1][col-1] == 'T') {
return true;
} else if (board[row][col] == 'T' && board[row-1][col+1] == 'T' ||
board[row][col] == 'T' && board[row+1][col-1] == 'T') {
return true;
}
return false;
}
字符 T 被随机分配到棋盘上。我需要在放置字符 T 时检查它的对角线是否存在另一个 T。
该方法获取行和列并检查棋盘上是否存在字符 T 以及它是否与另一个 T 成对角线。
如果 row = 0 和 col = 4 或 row = 1 和 col = 5 等等......它将失败并抛出数组越界。
获得矩阵中任意数字的对角线并避免边缘情况的有效方法是什么?
PS:我正在尝试在 Java
中编码
我会创建一个方法来获取元素,如果坐标无效,returns 会创建一个默认值。只需对您要搜索的内容以外的任何内容使用默认值。
public char getWithDefault(int row, int col, char default ) {
if ((0 <= row) && ( row < board.length) &&
(0<=col) && (col < board[row].length)) {
return board[row][col];
}
return default;
}
public boolean isDiagonal(int row,int col){
// arbitrary default value, as long as it is != 'T'
if (getWithDefault(row,col,'1') != 'T') return false;
if (getWithDefault(row+1,col+1,'1') == 'T') return true;
if (getWithDefault(row+1,col-1,'1') == 'T') return true;
if (getWithDefault(row-1,col+1,'1') == 'T') return true;
if (getWithDefault(row-1,col-1,'1') == 'T') return true;
return false;
}
从你的代码中,我推断出 board
是一个 char 数组。
如果我有以下 5x5 矩阵可以说
{ , , T , , }
{ , T , T , , }
{ , , T , , }
{ , T, , , }
{T, , , , }
而且我必须检查矩阵中的字符是否与另一个字符成对角线,我按以下方式检查它们,
public boolean isDiagonal(int row,int col){
if (row == board.length-1 && board[row-1][col+1] == 'T') {
return true;
} else if (col == board.length -1 && board[row+1][col-1] == 'T') {
return true;
} else if (board[row][col] == 'T' && board[row+1][col+1] == 'T' ||
board[row][col] == 'T' && board[row-1][col-1] == 'T') {
return true;
} else if (board[row][col] == 'T' && board[row-1][col+1] == 'T' ||
board[row][col] == 'T' && board[row+1][col-1] == 'T') {
return true;
}
return false;
}
字符 T 被随机分配到棋盘上。我需要在放置字符 T 时检查它的对角线是否存在另一个 T。
该方法获取行和列并检查棋盘上是否存在字符 T 以及它是否与另一个 T 成对角线。
如果 row = 0 和 col = 4 或 row = 1 和 col = 5 等等......它将失败并抛出数组越界。
获得矩阵中任意数字的对角线并避免边缘情况的有效方法是什么?
PS:我正在尝试在 Java
中编码我会创建一个方法来获取元素,如果坐标无效,returns 会创建一个默认值。只需对您要搜索的内容以外的任何内容使用默认值。
public char getWithDefault(int row, int col, char default ) {
if ((0 <= row) && ( row < board.length) &&
(0<=col) && (col < board[row].length)) {
return board[row][col];
}
return default;
}
public boolean isDiagonal(int row,int col){
// arbitrary default value, as long as it is != 'T'
if (getWithDefault(row,col,'1') != 'T') return false;
if (getWithDefault(row+1,col+1,'1') == 'T') return true;
if (getWithDefault(row+1,col-1,'1') == 'T') return true;
if (getWithDefault(row-1,col+1,'1') == 'T') return true;
if (getWithDefault(row-1,col-1,'1') == 'T') return true;
return false;
}
从你的代码中,我推断出 board
是一个 char 数组。