【问题标题】:Less ugly way to add adjacent fields in a matrix在矩阵中添加相邻字段的不那么难看的方法
【发布时间】:2022-10-06 02:13:01
【问题描述】:

我正在尝试将每个字段的所有相邻字段(包括对角相邻)添加到 nxm 整数矩阵中。当逐个索引遍历这个索引时,然后在边界和角落情况(例如 [0][n-1]),这个评估将失败,因为周围八个字段中的一些将不存在(在上面的例子中特别是 [-1 ][n-2]、[-1][n-1]、[-1][n]、[0][n] 和 [1][n])。

我想到的最简单的解决方案要么是

if(i != 0){
   //check all fields
}else if(i == 0 && j == 0){
   //check only fields left, below and left-below 
}else if(...){
    ...
}

或使用 try-catch 八次

int count = 0;
try{
    count += matrix[i-1][j];
}catch(IndexOutOfBoundsException e){
    ....
}

看起来仍然很丑。有没有更好的解决方案?

    标签: java


    【解决方案1】:

    您可以使用嵌套循环来生成所有可能的移动,因此边界检查只需编写一次。

    int count = 0;
    for (int dx = -1; dx <= 1; dx++)
        for (int dy = -1; dy <= 1; dy++)
            if (dx != 0 || dy != 0) {
                int nx = i + dx, ny = j + dy;
                if (nx >= 0 && nx < n && ny >= 0 && ny < m) count += matrix[nx][ny];
            }
    

    【讨论】:

      【解决方案2】:

      您可以创建大小为 n+2 x m+2 的矩阵。这个矩阵将在 nxm 矩阵周围有额外的行和列。现在你用零填充这些周围的行/列。现在如果你让你的循环从 1 开始直到 size()-2 你总是有周围的细胞

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多