Corp. and Ltd.
Corp. and Ltd.

Reputation: 391

2D Array Concatenation

I need a method that given input 2D array {{1,2},{3,4}} and (int)row=2; (int)column = 3, will produce a concatenated 2D array {{1,2,1,2,1,2}{3,4,3,4,3,4}}.

My attempt was to use a nested for loop to expand them both horizontally and and vertically, but was unsuccessful. This is what I have so far:

    int row = 2;
    int column = 5;
    int count = 0;
    int[][] list = {{12,3},{3,4}};

    int [][] renewed = new int[row*list.length][column*list[0].length]; 

    for (int l = 0; l<list.length; l++) {
        for (int k = 0; k<renewed.length; k+= list.length) {
            renewed[l+k] = list[l];
        }
    }        

    System.out.println(Arrays.deepToString(renewed));       
    }
}

^This produces list[][] expanded vertically, for the first column

    int row = 2;
    int column = 4;
    int[][] list = {{12,3},{3,4}};

    int [][] renewed = new int[row*list.length][column*list[0].length]; 
    for (int i = 0; i<list[0].length; i++) {
        for (int j = 0; j<renewed[0].length; j+=list[0].length) {
            renewed[0][j+i] = list[0][i];
        }
    }

    System.out.println(Arrays.toString(renewed[0]));       
}

^This produces list[][] expanded horizontally, for the first row;

So how can I concatenate these two methods in order to produce a method that expands BOTH horizontally and vertically?

Upvotes: 1

Views: 586

Answers (1)

Paul Boddington
Paul Boddington

Reputation: 37655

I think the easiest way is to iterate over every position in the new array and use the remainder operator % to get the right entry of the original.

int[][] list = {{1,2},{3,4}};
int row = 2;
int column = 5;
int [][] renewed = new int[row*list.length][column*list[0].length];
for (int i = 0; i < renewed.length; i++) {
    for (int j = 0; j < renewed[0].length; j++) {
        renewed[i][j] = list[i % list.length][j % list[0].length];
    }
}
System.out.println(Arrays.deepToString(renewed));

Upvotes: 2

Related Questions