1

javaでn要素の配列を2次元配列に転送したいです。

例えば:

[1,2,3,4]

この配列は 2 次元配列に転送する必要があります

[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4] [3,4]]

  • 2 次元配列の最初の行は 1, 2 です。
  • two-array の 2 行目は 1, 3 です。
  • two-array の 3 行目は 1, 4 です。
  • two-array の 4 行目は 2, 3 です。
  • two-array の 5 行目は 2, 4 です。
  • 最後の行は 3, 4
4

2 に答える 2

8

あなたのためにコードを書くことなく...

2 次元配列に必要な大きさを考えてみてください。各値を宛先配列に取得するには、ソース配列の内容をループする必要があることを認識してください。

だから、それは次のようになります...

適切なサイズの 2 次元配列を作成します。for ループを使用して、1 次元配列をループします。その for ループ内で、1 次元配列の各値を 2 次元配列のどこに配置するかを決定する必要があります。カウンター変数に対して mod 関数を使用して、2 次元配列のインデックスを「ラップ アラウンド」してみてください。これは宿題なので、意図的に曖昧にしています。コードを投稿してみて、行き詰まった場所を確認してください。

または、そのコードを使用できます:-

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

順列と組み合わせから、2D 配列の行の長さを取得できます (つまり、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 に答える