我正在编写一个尽可能高效地乘矩阵(2D数组)的程序,为此需要将我的两个数组分成两个,并将它们发送到第二个程序中进行乘法运算。 我遇到的问题是如何在特定点(中间位置)将2D数组分成两个2D数组。 有人有什么想法吗?
我正在编写一个尽可能高效地乘矩阵(2D数组)的程序,为此需要将我的两个数组分成两个,并将它们发送到第二个程序中进行乘法运算。 我遇到的问题是如何在特定点(中间位置)将2D数组分成两个2D数组。 有人有什么想法吗?
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);
//我们还需要知道数组中有多少元素
int numberOfElementsInArray = array[0].length;
现在我们拥有了创建两个二维数组所需的所有信息。接下来,我们必须显式地复制并移动数据。
//第一个数组的长度将是我们已经得到的中间点
String [][] newArrayA = new String[halfWayPoint][numberOfElementsInArray];
//这将复制数据
for(int i = 0; i < halfWayPoint; i++)
{
newArrayA[i] = array[i];
}
//现在创建另一个数组
int newArrayBLength = array.length - halfWayPoint;
String[][] newArrayB = new String[newArrayBLength][numberOfElementsInArray];
/*
* 这将复制数据。请注意,for循环从halfWayPoint开始。
* 这是因为这是我们在第一个数组中复制的位置。
*/
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];
// 将原始数组的前一半复制到A数组中
System.arraycopy(array,0,A,0,half);
// 将原始数组的后一半复制到B数组中
System.arraycopy(array,half,B,0,array.length - half);
new int[length-half][ROW]
,但在您的循环中,i
的范围是从 0...length
。因此,i
的值将大于该数组允许的第一个索引。应该像这样修改 for(int i = 0; i < length - half; i++)
。 - user489041