-5

Javaでコーディングしています。

配列のインデックスは次のようになります。

[0,0] [0,1] [0,2] [0,3] [0,4]
[1,0] [1,1] [1,2] [1,3] [1,4]
[2,0] [2,1] [2,2] [2,3] [2,4]
[3,0] [3,1] [3,2] [3,3] [3,4] 
[4,0] [4,1] [4,2] [4,3] [4,4]
[5,0] [5,1] [5,2] [5,3] [5,4]

このままでいいのか(?)

[5,0] [5,1] [5,2] [5,3] [5,4]
[4,0] [4,1] [4,2] [4,3] [4,4]
[3,0] [3,1] [3,2] [3,3] [3,4]
[2,0] [2,1] [2,2] [2,3] [2,4]
[1,0] [1,1] [1,2] [1,3] [1,4]
[0,0] [0,1] [0,2] [0,3] [0,4]
4

2 に答える 2

3

おそらく、これで明らかになるでしょう。この配列があると仮定します:

int[][] arr = new int[6][5];

「通常」は次のように繰り返します。

for( int i = 0; i < arr.length; i++) {
    for( int j = 0; j < arr[i].length; j++) {
        System.out.print( "[" + i + "," + j +"]");
    }
    System.out.println();
}

これは以下を出力します:

[0,0][0,1][0,2][0,3][0,4]
[1,0][1,1][1,2][1,3][1,4]
[2,0][2,1][2,2][2,3][2,4]
[3,0][3,1][3,2][3,3][3,4]
[4,0][4,1][4,2][4,3][4,4]
[5,0][5,1][5,2][5,3][5,4]

iこれで、同じ配列を取得できますが、逆方向に反復することで、異なる方法で反復して出力を生成できます。

for( int i = arr.length - 1; i >=0; i--) {
    for( int j = 0; j < arr[i].length; j++) {
        System.out.print( "[" + i + "," + j +"]");
    }
    System.out.println();
}

これは以下を出力します:

[5,0][5,1][5,2][5,3][5,4]
[4,0][4,1][4,2][4,3][4,4]
[3,0][3,1][3,2][3,3][3,4]
[2,0][2,1][2,2][2,3][2,4]
[1,0][1,1][1,2][1,3][1,4]
[0,0][0,1][0,2][0,3][0,4]

ideoneで試してみて、動作することを確認できます。

于 2013-08-26T18:29:15.677 に答える
0

インデックスを操作するだけで、配列要素を異なる順序で印刷/アクセスできます。

以下のJava8 ラムダ式を使用すると、コードはよりきれいに見えます。

public class Matrix {
    static interface Block {
        void run(int array[][], int i, int j, int rows, int cols);
    }

    public static void main(String[] args) {
        int array[][] = new int[6][5];
        print(array, new Block() {
            @Override
            public void run(int array[][], int i, int j, int rows, int cols) {
                System.out.printf("[%d,%d] ", i, j);
            }
        });
        print(array, new Block() {
            @Override
            public void run(int array[][], int i, int j, int rows, int cols) {
                System.out.printf("[%d,%d] ", j, i);
            }
        });
        print(array, new Block() {
            @Override
            public void run(int array[][], int i, int j, int rows, int cols) {
                System.out.printf("[%d,%d] ", rows - 1 - i, j);
            }
        });
        print(array, new Block() {
            @Override
            public void run(int array[][], int i, int j, int rows, int cols) {
                System.out.printf("[%d,%d] ", i, cols - 1 - j);
            }
        });
    }

    private static void print(int[][] array, Block block) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                block.run(array, i, j, array.length, array[i].length);
            }
            System.out.println();
        }
        System.out.println("------------------------");
    }
}

出力

[0,0] [0,1] [0,2] [0,3] [0,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[5,0] [5,1] [5,2] [5,3] [5,4] 
------------------------
[0,0] [1,0] [2,0] [3,0] [4,0] 
[0,1] [1,1] [2,1] [3,1] [4,1] 
[0,2] [1,2] [2,2] [3,2] [4,2] 
[0,3] [1,3] [2,3] [3,3] [4,3] 
[0,4] [1,4] [2,4] [3,4] [4,4] 
[0,5] [1,5] [2,5] [3,5] [4,5] 
------------------------
[5,0] [5,1] [5,2] [5,3] [5,4] 
[4,0] [4,1] [4,2] [4,3] [4,4] 
[3,0] [3,1] [3,2] [3,3] [3,4] 
[2,0] [2,1] [2,2] [2,3] [2,4] 
[1,0] [1,1] [1,2] [1,3] [1,4] 
[0,0] [0,1] [0,2] [0,3] [0,4] 
------------------------
[0,4] [0,3] [0,2] [0,1] [0,0] 
[1,4] [1,3] [1,2] [1,1] [1,0] 
[2,4] [2,3] [2,2] [2,1] [2,0] 
[3,4] [3,3] [3,2] [3,1] [3,0] 
[4,4] [4,3] [4,2] [4,1] [4,0] 
[5,4] [5,3] [5,2] [5,1] [5,0] 
------------------------
于 2013-08-26T18:42:04.133 に答える