1

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

2 回答 2

8

无需为您编写任何代码...

想想你的二维数组需要多大。认识到您需要遍历源数组的内容才能将每个值放入目标数组。

所以它看起来像......

创建一个适当大小的二维数组。使用 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]; 
于 2012-10-11T04:42:12.790 回答
2

从排列和组合中,您可以获得二维数组的行长(即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)));
}

干杯,钱德。

于 2012-10-11T06:38:04.797 回答