【问题标题】:Finding Diagonal of a number in 2D array?在二维数组中查找数字的对角线?
【发布时间】:2016-03-29 22:40:24
【问题描述】:

如果我有以下 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 随机分配到板上。我需要在放置 char T 时检查是否存在另一个 T 对角线。

该方法获取行和列并检查字符 T 是否存在于板上,以及它是否与另一个 T 对角线。

如果 row = 0 和 col = 4 或 row = 1 和 col = 5 等等......它将失败并抛出数组越界。

获取矩阵中任意数字的对角线并避免边缘情况的有效方法是什么?

PS:我正在尝试用 Java 编写代码

【问题讨论】:

  • 您的用户名非常合适。您是否为每个问题创建一个新帐户?
  • @Gendarme 不,我为什么要这样做? :)
  • 我不理解你的代码。为什么'T'?为什么row 需要等于board.length-1
  • @Gendarme 这是因为我正在检查字符“T”是否彼此对角存在。第一个和第二个条件是为了避免极端情况而编写的。
  • 但是您的矩阵由数字 1 到 5 组成。你也说"如果输入0为行...";用户正在输入该行吗?你的方法实际上是什么?我希望它类似于areDiagonal(int a, int b) 来检查ab 在矩阵中任何地方 是否彼此对角线。

标签: java arrays matrix diagonal


【解决方案1】:

我会创建一个方法来获取元素,如果坐标无效,它会返回一个默认值。只需对除您搜索的内容之外的任何内容使用默认值。

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 是一个字符数组。

【讨论】:

  • 我试图了解它是如何工作的。 getWithDefault 唯一的作用就是检查坐标是否在范围内?
  • 是的(也省了很多文字)。如您所见,有四个条件需要检查。
  • 是的,我明白了。非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2011-05-25
  • 2023-03-23
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多