在二维数组中查找数字的对角线?

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 数组。