我正在写一个程序以尽可能有效地乘以矩阵(二维数组),为此我需要将我的两个数组分割成两个并将它们发送出去到第二个节目要倍增。我遇到的问题是如何在特定点(半途)将2d数组拆分为两个2d数组。有没有人有任何想法?java:如何将二维数组拆分为两个二维数组
回答
比方说你有一个字符串,像这样
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);
我用这个解决方案的问题是,我的编译器不喜欢用这一行将2d数组部分赋值到正常数组:newArrayA [i] = array [i];有没有解决这个问题的方法? – user650309 2011-03-29 15:38:08
对不起,更新了 – user489041 2011-03-29 16:29:43
我对阵列的前半部分(上半部分和左半部分)都有完美的工作,但是在下半部分不能使用。我只是不断从索引中取出限制的例外。 – user650309 2011-03-29 19:04:48
- 1. 拆分为二维数组
- 2. 如何将数组列表拆分为二维数组?
- 3. 将两个一维数组转换为单个二维数组
- 4. 将一维数组为二维数组
- 5. 将二维数组转换为二维数组的多个块
- 6. Java二维数组
- 7. 二维数组java
- 8. 了两个二维数组
- 9. C#:拆分一维数组二维数组
- 10. 从两个一维数组中分配值给二维数组
- 11. 将二维数组转换为二维数组列表?
- 12. 如何将单词列表拆分为二维字母数组?
- 13. 将Java一维数组为二维数组
- 14. 将二维数组转换为Java中的一维数组
- 15. 添加两个一维数组并显示为二维数组
- 16. 如何比较两个二维数组
- 17. 如何将单个数组组合为一个二维数组?
- 18. 如何将二维数组转换成一个维数组
- 19. 二维数组
- 20. 二维数组
- 21. 二维数组
- 22. 二维数组
- 23. 二维数组
- 24. 将二维数组划分为表面
- 25. 将单个二维数组转换为多维数组
- 26. 如何创建二维数组的二维数组?
- 27. 如何创建二维char数组的二维数组?
- 28. 转换两个一维数组到一个二维数组
- 29. 将二维数组切片成较小的二维数组
- 30. Java - 打印二维数组
到目前为止,你做了什么魔法? – Neal 2011-03-28 19:08:20
这是什么意思分裂一个二维数组“半途”? – Pops 2011-03-28 19:22:34