我想将一个n元素数组转移到java中的二维数组。
例如:
[1,2,3,4]
这个数组应该转移到一个二维数组
[[1,2],[1,3],[1,4],[2,3],[2,4] [3,4]]
答案 0 :(得分:8)
无需为您编写任何代码......
想想你的2D阵列需要多大。 认识到您需要遍历源数组的内容以将每个值放入目标数组中。
所以它看起来像......
创建适当大小的二维数组。 使用for循环遍历1d数组。 在for循环中,你需要弄清楚1d数组中每个值应该在2d数组中的位置。尝试对你的计数器变量使用mod函数来“环绕”2d数组的索引。 我故意模糊不清,因为这是家庭作业。尝试发布一些代码,以便我们可以看到您遇到的问题。
或者您可以使用该代码: -
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];
答案 1 :(得分:2)
从Permutation和组合中,您可以得到2D数组的行长度(即n!/ r!*(n-r)!)。
getLengthOfArray
方法可以做到这一点。 calculatePermutation
是计算permutaion的辅助方法。 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)));
}
干杯, 昌德。