Как разделить 2D-массив на левый и правый массивы?

Возможный дубликат:
Java: Как разделить 2d массив на два 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)

Может кто-нибудь, пожалуйста, помогите? Спасибо

3 ответа

Решение

Это должно хорошо сработать:

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, поскольку он делает код более понятным для дальнейшей проверки. Что касается производительности, я не думаю, что это имеет значение, пока ваш массив такой маленький.

Для массива 8x8 есть вероятность, что при использовании умных методов копирования массивов выигрыш в производительности будет минимальным. Я рекомендую вам просто кодировать это, используя вложенные циклы for. Код будет проще, и вы сделаете работу быстрее.

Попробуй это:

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 в отличие от изобретать колесо самостоятельно. На мой взгляд, это легче управлять / читать, чем вложенные циклы.

Другие вопросы по тегам