将1-D阵列转换为2-D阵列

时间:2012-05-11 21:51:31

标签: java arrays

我正在尝试获取包含400个整数的数组,并将其拆分为20x20的2-D数组。我以为我有正确的算法,但是1-D数组的总和与2-D数组的总和不匹配,所以我显然做错了什么。这是我的代码:

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 个答案:

答案 0 :(得分:3)

对于每对xy,您的代码会将的每个值从inArray分配给array[x][y]。这显然是不正确的。

以下是修复代码的一种方法:

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++];
        }
    }
}

答案 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++)
        {
            array[x][y] = inArray[x * 20 + y];  // or devise your own calculation
        }
    }
}

答案 2 :(得分:2)

当前方法将为数组中的每个元素分配原始中的最后一个元素。

你不应该迭代z,而是在相同的循环中将它用作计数器。

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

答案 3 :(得分:1)

你基本上分配的数组[x] [y]等于inArray [0],然后是inArray [1],然后是inArray [2],一直是[400]。

我会做像

这样的事情
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];
        }
    }
}