将两个2D阵列扩展为更大的阵列

时间:2014-07-24 14:35:09

标签: java arrays merge concatenation

我有两个java 2D数组(array1和array2),都是Double类型,我想连接在一起。 array1和array2是n-by-d矩阵。每个阵列的n行可以彼此不同,但d列总是相同的。 问题是:我必须在第一个之后连接array2。(最好进入新的outputMatrix)

示例:

ARRAY1:

2 3
6 5
4 7

数组2:

1 5
3 7

输出数组(n-array1 + n-array2)-by -d:

2 3 
6 5 
4 7 
1 5
3 7 

我的想法是将array1复制到outputMatrix中,然后用array2填充它的延续。

用于合并两个数组(已经实现)的Java代码如下所示:

private static double[][] outputMatrix ;
outputMatrix = new double[array1.length+array2.length][array1[0].length];  

for (int column = 0; column < array1[0].length; column++) { 
    for (int row = 0; row < (array1.length); row++) {       
        outputMatrix[row][column] = array1[row][column];
    }
}

for (int column = 0; column < array1[0].length; column++) { 
        for (int row = array1.length; row < (array1.length+ array2.length); row++) {    
            outputMatrix[row][column] = array2[row][column]; //error here as array2 starts iterating at field [4][0] which isnt defined in the example
        }
}

2 个答案:

答案 0 :(得分:4)

你的指数错了。

应该是

for (int column = 0; column < array1[0].length; column++) { 
    for (int row = 0; row < array2.length; row++) {    
        outputMatrix[row+array1.length][column] = array2[row][column]; 
    }
}

因为array2具有从0array2.length-1的索引。

答案 1 :(得分:1)

所以正在发生的事情是,当您尝试将数据从第二个数组传输到outputMatric变量时,您将超出第二个数组(array2)中的范围。这是因为你是outputMatrix试图在[array1.length + row] [array1.length + column]放置一个值而第二个数组没有那么大。最重要的是,你的行索引是错误的,你需要添加array1长度来弥补它,或者在那个位置启动for循环的行变量。我选择只是将长度添加到变量的存储中。所以,你应该制作你的代码:

outputMatrix[row + array1.length][column] = array2[row - array1.length][column - array1[0].length];