二维数组矩阵;阅读对角线

2D Array Matrix; Reading Diagonals

我正在尝试为 5x5 矩阵编写一个方法来提供输出: 00004 00030 00200 01000 00000

我对该特定代码的输出是: 40000 03000 00200 00010 00000

本质上,我试图从右到左而不是从左到右读取数组。 我的参数是我只能使用一个 for 循环,不能对方法中的值进行硬编码。

有什么办法可以通过简单的更改来实现吗?

 private static void fillDiagonal_2( int[][] m )
 {
            for (int row=0; row<m.length; ++row)
            {   
                m[row][row]=row;
                System.out.print(m[row][row]);
            }

  }    
for (int row = 0; row < m.length; ++row)
{   
    m[row][m.length - row] = row;
    System.out.print(m[row][row]);
}

应该可以。

编辑: 您应该在 for 循环之外声明一个变量,这样您就不会每次都记得 m.length 。

int length = m.length - 1;

   for (int row = 0; row <= length; ++row)
   {   
     m[row][length - row] = row;
     System.out.print(m[row][row]);
   }

试试看。

这应该有效:

int len = m.length;
for (int i = 0; i < (len * len); i++) {
    System.out.print(m[i / len][len - (i % len) - 1]);
}

示例:

int m[][] = new int[][]{{0, 0, 0, 0, 4}, {0, 0, 0, 3, 0}, {0, 0, 2, 0, 0}, {0, 1, 0, 0, 0}, {0, 0, 0, 0, 0}};

输出:

4000003000002000001000000

它的工作原理是将每个索引 i 关联到矩阵 m 中的一个位置,使用长度:

i -> m[i / len][len - (i % len) - 1]
0 -> m[   0   ][      len - 1      ]
1 -> m[   0   ][      len - 2      ]
2 -> m[   0   ][      len - 3      ]
3 -> m[   0   ][      len - 1      ]
4 -> m[   0   ][      len - 1      ]
5 -> m[   1   ][      len - 1      ]
6 -> m[   1   ][      len - 2      ]
7 -> m[   1   ][      len - 3      ]
...