我想将一个 n 元素数组传输到 java 中的二维数组。
例如:
[1,2,3,4]
这个数组应该被转移到一个二维数组
[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4] [3,4]]
- 二维数组的第一行是 1, 2。
- 双数组的第二行是 1, 3。
- 双数组的第三行是 1, 4。
- 两个数组的第四行是 2, 3。
- 两个数组的第五行是 2, 4。
- 最后一行是 3, 4
无需为您编写任何代码...
想想你的二维数组需要多大。认识到您需要遍历源数组的内容才能将每个值放入目标数组。
所以它看起来像......
创建一个适当大小的二维数组。使用 for 循环遍历您的一维数组。在该 for 循环中,您需要确定 1d 数组中的每个值应该在 2d 数组中的位置。尝试对您的计数器变量使用 mod 函数来“环绕”二维数组的索引。我故意含糊其辞,因为这是家庭作业。尝试发布一些代码,以便我们可以看到您卡在哪里。
或者您可以使用该代码:-
int array2d[][] = new int[10][3];
for(int i=0; i<10;i++)
for(int j=0;j<3;j++)
array2d[i][j] = array1d[(j*10) + i];
从排列和组合中,您可以获得二维数组的行长(即n!/r!*(nr)!)。
getLengthOfArray
方法做到这一点。calculatePermutation
是计算排列的辅助方法。transferToTwoDArray
会给你正确的答案。public int[][] transferToTwoDArray(final int[] oneDArray)
{
assert null != oneDArray;
final int length = oneDArray.length;
assert length > 2;
final int newArrayLength = getLengthOfArray(length, 2);
final int[][] newArray = new int[newArrayLength][2];
int nextRowIndex = 0;
for (int i = 0; i < length; i++)
{
int nextValue = i + 1;
while (nextValue < length)
{
newArray[nextRowIndex][0] = oneDArray[i];
newArray[nextRowIndex][1] = oneDArray[nextValue++];
nextRowIndex++;
}
}
return newArray;
}
/**
* Calculate permutation.
*
* @param length
* the length
* @return the int
*/
private int calculatePermutation(final int length)
{
if (length == 0)
{
return 1;
}
return length * calculatePermutation(length - 1);
}
/**
* Gets the length of array.
*
* @param length
* the length
* @param arrayDimention
* the array dimention
* @return the length of array
*/
private int getLengthOfArray(final int length, final int arrayDimention)
{
return calculatePermutation(length)
/ ((calculatePermutation(arrayDimention)) * (calculatePermutation(length - arrayDimention)));
}
干杯,钱德。