在矩阵中按降序排列数字边框

时间:2017-04-12 15:02:44

标签: java arrays loops matrix

我正在尝试围绕一个上升和下降的空矩阵建立边框。我已经有从0到4上升的顶部和左侧,但我无法让右侧和底部从4变为0.这是我的for循环的代码。我已经尝试了每个变体来使它工作,但它要么给我一个索引超出范围异常或只是显示为零。我非常感谢任何反馈。

private static void fillBorder( int[][] matrix )
{
   for (int r=0; r<matrix.length; ++r) // left side
   {
        matrix[r][0] = r; 
   }
   for (int j=0 ; j<matrix.length; ++j) // top
   {
        matrix[0][j] = j;
   }
   for (int m=matrix.length; m>0; --m) // bottom
   {
        matrix[4][m] = m;
   }
   for (int s=matrix.length; s>0; --s) // right side
   {
        matrix[s][4] = s;
   }

}

这里还有一张图片,说明输出应该是什么样的,以便让您更好地了解它应该是什么。 picture of output

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为你可以通过一个for循环执行此操作:

for (int i=0; i < matrix.length; ++i) {
    matrix[0][i] = i;
    matrix[i][0] = i;
    matrix[matrix.length-1][matrix.length-1-i] = i;
    matrix[matrix.length-1-i][matrix.length-1] = i;
}

这假设matrix实际上是正方形(即具有相同的行数和列数)。如果没有,那么我的代码将不得不改变,但是你的问题陈述会再次改变。

for (int r=0; r < matrix.length; ++r) {
    for (int c=0; c < matrix.length; ++c) {
        System.out.print(matrix[r][c] + " ");
    }
    System.out.println();
}

<强>输出:

0 1 2 3 4
1 0 0 0 3
2 0 0 0 2
3 0 0 0 1
4 3 2 1 0

答案 1 :(得分:0)

对于你的行,你应该使用matrix [0] .length。另一件事是你应该使用矩阵维度而不是硬编码4到代码

bp.get_figure().gca().set_title("")