Если я вас правильно понимаю, вы хотите добавить его в противоположном измерении, чем думает DomS и MeBigFatGuy.Если я прав, есть два пути:
Если высота «столбца» (длина 2-го измерения) фиксирована в каждом массиве, вы можете использовать этот метод.Он оставляет пустые (заполненные нулями) ячейки, если массивы имеют разную длину первого измерения.Чтобы сделать этот код более безопасным, вы можете захотеть
/**
* 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;
}
Если вы хотите, чтобы столбец мог варьироваться в пределах каждого массива, это возможно с небольшим изменением.Это не оставляет пустых ячеек.
/**
* 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;
}
Тестовый код изменен из 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();
}
}