1

重複の可能性:
java:2D配列を2つの2D配列に分割する方法

必要なのは、この配列を分割することです。

int[][] bitblock = {
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0},
    {1,0,1,0,1,0,1,0}};

これは8*8配列です。左右の配列に分割して、ここに格納します。

int[][] leftblock = new int [bitblock.length][bitblock[0].length/2];
int[][] rightblock = new int [bitblock.length][bitblock[0].length/2];

Syste.arraycopyメソッドを使用し、ビットブロックを上下の配列に分割することができました。左右に分割するのに苦労しています。

System.arraycopy(bitblock, 0, leftblock, 0, leftblock.length);
System.arraycopy(bitblock, rightblock.length, rightblock, 0, rightblock.length)

誰か助けてもらえますか?ありがとう

4

3 に答える 3

2

これはうまくいくはずです:

int[][] bitblock = {{1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}, {1, 0, 1, 0, 1, 0, 1, 0}};

    int[][] leftblock = new int[bitblock.length][bitblock[0].length / 2];
    int[][] rightblock = new int[bitblock.length][bitblock[0].length / 2];

    for (int i = 0; i < bitblock.length; i++) {
        for (int j = 0; j < bitblock[0].length / 2; j++) {
            leftblock[i][j] = bitblock[i][j];
        }

        for (int j = bitblock[0].length / 2; j < bitblock[0].length; j++) {
            rightblock[i][j - bitblock[0].length / 2] = bitblock[i][j];
        }
    }

System.arraycopy を使用することもできます。これにより、将来の検査のためにコードがより明確になります。パフォーマンスに関しては、配列がそれほど小さい限り、問題ではないと思います。

于 2012-11-18T14:28:08.693 に答える
1

8x8 配列の場合、巧妙な配列コピー方法を使用しても、パフォーマンス上の利点はほとんどない可能性があります。ネストされた for ループを使用して単純にコーディングすることをお勧めします。コードはより単純になり、仕事をより迅速に完了することができます。

于 2012-11-18T14:20:04.847 に答える
0

これを試して:

for (int i = 0 ; i < bitblock.length ; i++) {
    System.arraycopy(bitblock[i], 0, leftblock[i], 0, leftblock[i].length);

    System.arraycopy(bitblock[i], bitblock[0].length/2, 
                                    rightblock[i], 0, leftblock[i].length);
}

個人的には、この場合、ネストされたループの方が優れているとは思いませんSystem.arraycopy。車輪を自分で再発明するのではなく、 の機能を使用することもできます。私の意見では、これはネストされたループよりも管理/読み取りが簡単です。

于 2012-11-18T14:28:20.457 に答える