-1

3D 配列の宣言に関する以前の投稿に出力が必要で、3D 配列の宣言中にエラーが発生しました。すべての最初の要素の出力を最初に、2 番目の要素を 2 番目に、というように for each で取得したいと考えています。しかし、現在、私は次元を賢明にしています。誰かが正しいアプローチを見つけるのを手伝ってくれますか? ここに私のサンプルコードがあります:

Integer[][][] _3D = new Integer[][][]{{{1,2,3},{4,5,6},{7,8,9},{2,4,5}},{{1,2,3},{4,5,6},{7,8,9},{2,4,5}}}; // it should be like this.


for (Integer[][] d3 : _3D) {
    for (Integer[] d2 : d3) {
        for (Integer d : d2) {
            System.out.print(d+"\t");  
                          // Expecting 1,4,7,2,1,4,7,2,2,5,8,4,2,5,8,4,3,6,9,5,3,6,9,5
            }
    }
}
4

4 に答える 4

3

最も内側の配列の長さが常に 3 であることが確実な場合は、次の操作を実行できます。

for(int i = 0; i < 3; i++) {
    for (Integer[][] d3 : _3D) {
        for (Integer[] d2 : d3) {
            System.out.print(d2[i]);
        }
    }
}

ところで: なぜ のInteger[][][]代わりにを使用するのint[][][]ですか?

于 2013-11-14T08:31:15.993 に答える
0

このコードを試してみてください:

     Integer[][][] _3D = new Integer[][][]{{{1,2,3},{4,5,6},{7,8,9},{2,4,5}},{{1,2,3},{4,5,6},{7,8,9},{2,4,5}}}; // it should be like this.


    //Expecting 1,4,7,2,1,4,7,2,2,5,8,4,2,5,8,4,3,6,9,5,3,6,9,5

    //Assume length are equal
    int length = _3D[0][0].length;

    for(int currColumn = 0; currColumn<length; currColumn++)
    {
        for (Integer[][] d3 : _3D) {

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

        }
    }

//1,4,7,2,1,4,7,2,2,5,8,4,2,5,8,4,3,6,9,5,3,6,9,5を期待

コンソールでの出力:

        1,4,7,2,1,4,7,2,2,5,8,4,2,5,8,4,3,6,9,5,3,6,9,5,
于 2013-11-14T08:48:16.813 に答える
0

すべてのインデックス 0、次にすべてのインデックス 1 などが必要な場合は、単一の配列の要素を反復処理する foreach を使用できません。

代わりに、これを試してください:

for (Integer[][] d3 : _3D) 
    for (int i = 0; i < d3[0].length; i++) 
        for (int j = 0; j < d3.length; j++) 
            System.out.print(d3[j][i]+"\t");  

2 つの内側のループの「逆」の入れ子に注意してください。

于 2013-11-14T08:23:47.790 に答える