如何在java中将数组传递给二维数组

时间:2012-10-11 04:31:48

标签: java list

我想将一个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

2 个答案:

答案 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)));
}

干杯, 昌德。