If I understand you correctly, you want to append it, in the opposite dimension, than DomS and MeBigFatGuy thinks. If I'm is correct there are two ways:
If the "column" height (length of 2nd dimension) are fixed within each array you can use this method. It leaves blank (zero-filled) cells, if the arrays have different length of the first dimension. Tho make this code safer, you might want to
/**
* For fixed "column" height. "Blank cells" will be left, if the two arrays have different "width"
*/
static int[][] appendArray2dFix(int[][] array1, int[][] array2){
int a = array1[0].length, b = array2[0].length;
int[][] result = new int[Math.max(array1.length,array2.length)][a+b];
//append the rows, where both arrays have information
int i;
for (i = 0; i < array1.length && i < array2.length; i++) {
if(array1[i].length != a || array2[i].length != b){
throw new IllegalArgumentException("Column height doesn't match at index: " + i);
}
System.arraycopy(array1[i], 0, result[i], 0, a);
System.arraycopy(array2[i], 0, result[i], a, b);
}
//Fill out the rest
//only one of the following loops will actually run.
for (; i < array1.length; i++) {
if(array1[i].length != a){
throw new IllegalArgumentException("Column height doesn't match at index: " + i);
}
System.arraycopy(array1[i], 0, result[i], 0, a);
}
for (; i < array2.length; i++) {
if(array2[i].length != b){
throw new IllegalArgumentException("Column height doesn't match at index: " + i);
}
System.arraycopy(array2[i], 0, result[i], a, b);
}
return result;
}
If you want to allow the column with to vary within each array, this is possible, with a minor change. This doesn't leave any empty cells.
/**
* For variable "column" height. No "blank cells"
*/
static int[][] appendArray2dVar(int[][] array1, int[][] array2){
int[][] result = new int[Math.max(array1.length,array2.length)][];
//append the rows, where both arrays have information
int i;
for (i = 0; i < array1.length && i < array2.length; i++) {
result[i] = new int[array1[i].length+array2[i].length];
System.arraycopy(array1[i], 0, result[i], 0, array1[i].length);
System.arraycopy(array2[i], 0, result[i], array1[i].length, array2[i].length);
}
//Fill out the rest
//only one of the following loops will actually run.
for (; i < array1.length; i++) {
result[i] = new int[array1[i].length];
System.arraycopy(array1[i], 0, result[i], 0, array1[i].length);
}
for (; i < array2.length; i++) {
result[i] = new int[array2[i].length];
System.arraycopy(array2[i], 0, result[i], 0, array2[i].length);
}
return result;
}
Test code modified from DomS
public static void main(String[] args) {
//Test Var
int[][] array1 = new int[][] {
{1, 2, 3},
{3, 4, 5, 6},
};
int[][] array2 = new int[][] {
{11, 12, 13,14 },
{13, 14, 15, 16, 17},
};
int[][] expected = new int[][] {
{1, 2, 3, 11, 12, 13, 14},
{3, 4, 5, 6, 13, 14, 15, 16, 17}
};
int[][] appended = appendArray2dVar(array1, array2);
System.out.println("This");
for (int i = 0; i < appended.length; i++) {
for (int j = 0; j < appended[i].length; j++) {
System.out.print(appended[i][j]+", ");
}
System.out.println();
}
System.out.println("Should be the same as this");
for (int i = 0; i < expected.length; i++) {
for (int j = 0; j < expected[i].length; j++) {
System.out.print(expected[i][j]+", ");
}
System.out.println();
}
//Test Fix
array1 = new int[][] {
{1, 2, 3, 4},
{3, 4, 5, 6},
};
array2 = new int[][] {
{11, 12, 13},
{13, 14, 15},
};
expected = new int[][] {
{1, 2, 3, 4,11, 12, 13},
{3, 4, 5, 6, 13, 14, 15}
};
appended = appendArray2dFix(array1, array2);
System.out.println("This");
for (int i = 0; i < appended.length; i++) {
for (int j = 0; j < appended[i].length; j++) {
System.out.print(appended[i][j]+", ");
}
System.out.println();
}
System.out.println("Should be the same as this");
for (int i = 0; i < expected.length; i++) {
for (int j = 0; j < expected[i].length; j++) {
System.out.print(expected[i][j]+", ");
}
System.out.println();
}
}