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