1

400 個の整数を含む配列を取り、それを 20x20 の 2-D 配列に分割しようとしています。私は正しいアルゴリズムを持っていると思っていましたが、1 次元配列の合計が 2 次元配列の合計と一致しないため、明らかに何か間違っています。これが私のコードです:

private static void processArray(int[] inArray)
{
    int[][] array = new int[20][20];

    for (int x = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
            for (int z = 0; z < 400; z++)
            {
                array[x][y] = inArray[z];
            }
        }
    }
}

私は何を間違っていますか?

4

4 に答える 4

3

との各ペアに対してx、コードは からまでのすべての値をy割り当てます。これは明らかに間違っています。inArrayarray[x][y]

コードを修正する 1 つの方法を次に示します。

private static void processArray(int[] inArray)
{
    int[][] array = new int[20][20];

    for (int x = 0, z = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
            array[x][y] = inArray[z++];
        }
    }
}
于 2012-05-11T21:53:12.787 に答える
2

入力配列の最後の要素を出力配列のすべての要素に割り当てています。入力配列の内側のループは、正しい入力要素を選択する単一の割り当てに変更する必要があります。

private static void processArray(int[] inArray)
{
    int[][] array = new int[20][20];

    for (int x = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
            array[x][y] = inArray[x * 20 + y];  // or devise your own calculation
        }
    }
}
于 2012-05-11T21:53:07.710 に答える
2

現在のアプローチでは、配列内の各要素を元の最後の要素に割り当てます。

z同じループ内で反復するのではなく、カウンターとして使用する必要があります。

int z = 0;
for (int x = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
                array[x][y] = inArray[z++];
        }
    }
于 2012-05-11T21:53:14.530 に答える
1

基本的に、inArray[0]、inArray[1]、inArray[2]、[400] に等しい array[x][y] を割り当てています。

私は次のようなことをします

private static void processArray(int[] inArray)
{
    int[][] array = new int[20][20];

    for (int x = 0; x < 20; x++)
    {
        for (int y = 0; y < 20; y++)
        {
            array[x][y] = inArray[x * 20 + y];
        }
    }
}
于 2012-05-11T21:56:30.867 に答える