2017-04-12 7 views
1

空の行列の周りを昇順と降順で境界線を作成しようとしています。私はすでに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

+0

m> = 0かつs> = 0 – stinepike

答えて

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 
0

、あなたは行列[0] .LENGTHを使用する必要があります。もう一つは、コードに4をハードコードするのではなく、行列の次元を使うべきです。

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[0].length; ++j) // top 
     { 
      matrix[0][j] = j; 
     } 
     for (int m=matrix[0].length; m>0; --m) // bottom 
     { 
      matrix[matrix.length - 1][m] = m; 
     } 
     for (int s=matrix.length; s>0; --s) // right side 
     { 
      matrix[s][matrix[0].length - 1] = s; 
     } 

    } 
関連する問題