2011-03-28 103 views
2

我正在写一个程序以尽可能有效地乘以矩阵(二维数组),为此我需要将我的两个数组分割成两个并将它们发送出去到第二个节目要倍增。我遇到的问题是如何在特定点(半途)将2d数组拆分为两个2d数组。有没有人有任何想法?java:如何将二维数组拆分为两个二维数组

+0

到目前为止,你做了什么魔法? – Neal 2011-03-28 19:08:20

+0

这是什么意思分裂一个二维数组“半途”? – Pops 2011-03-28 19:22:34

回答

5

比方说你有一个字符串,像这样

 

String[][] array= new String[][] 
{ 
    {"a","b","c"}, 
    {"d","e","f"}, 
    {"h","i","j"}, 
    {"k","l","m"} 
}; 
 

一个二维数组,现在你需要一种方法来这些阵列在中途点分割。让我们得到中间点。找出阵列有多大,然后将其减半。请注意,如果数组长度不是偶数,也必须处理。例如,长度为3.如果是这种情况,我们将使用Math.floor()函数。

 

int arrayLength = array.length; 
int halfWayPoint = Math.floor(arrayLength/2); 
//we also need to know howmany elements are in the array 
int numberOfElementsInArray = array[0].length; 
 

现在我们有了所有的信息来创建两个二维数组。现在我们必须明确地复制创建和复制数据。

 

//the length of the first array will be the half way point which we already have 
String [][] newArrayA = new String[halfWayPoint][numberOfElementsInArray]; 
//this copies the data over 
for(int i = 0; i < halfWayPoint; i++) 
{ 
    newArrayA[i] = array[i]; 
} 

//now create the other array 
int newArrayBLength = array.length - halfWayPoint; 
String[][] newArrayB = new String[newArrayBLength][numberOfElementsInArray]; 
/* 
* This copies the data over. Notice that the for loop starts a halfWayPoint. 
* This is because this is where we left of copying in the first array. 
*/ 
for(int i = halfWayPoint; i < array.length; i++) 
{ 
    newArrayB[i] = array[i]; 
} 
 

而你的成就!现在

,如果你想这样做更好一点,你可以做这样的

 

int half = Math.floor(array/2); 
int numberOfElementsInArray = array[0].length; 
String [][] A = new String[half][numberOfElementsInArray]; 
String [][] B = new String[array.length - half][numberOfElementsInArray]; 
for(int i = 0; i < array.length; i++) 
{ 
    if(i < half) 
    { 
     A[i] = array[i]; 
    } 
    else 
    { 
     B[i] = array[i]; 
    } 

} 
 

最后,如果你不想明确做到这一点,你可以使用内置的功能。 System.arraycopy()就是一个例子。这是一个链接到它的api System.arraycopy()

 

int half = Math.floor(array/2); 
int numberOfElementsInArray = array[0].length; 
String [][] A = new String[half][numberOfElementsInArray]; 
String [][] B = new String[array.length - half][numberOfElementsInArray]; 
System.arraycopy(array,0,A,0,half); 
System.arraycopy(array,half,B,0,array.length - half); 
 
+0

我用这个解决方案的问题是,我的编译器不喜欢用这一行将2d数组部分赋值到正常数组:newArrayA [i] = array [i];有没有解决这个问题的方法? – user650309 2011-03-29 15:38:08

+0

对不起,更新了 – user489041 2011-03-29 16:29:43

+0

我对阵列的前半部分(上半部分和左半部分)都有完美的工作,但是在下半部分不能使用。我只是不断从索引中取出限制的例外。 – user650309 2011-03-29 19:04:48