1

可能重复:
java:如何将二维数组拆分为两个二维数组

需要的是拆分这个数组:

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 回答