二维阵列矩阵;阅读对角线

时间:2015-04-01 01:15:40

标签: java arrays matrix diagonal

我正在尝试为输出提供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]);
            }

  }    

2 个答案:

答案 0 :(得分:0)

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]);
   }

试试吧。

答案 1 :(得分:0)

这应该有效:

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      ]
...