1

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

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

对于每一对xand y,您的代码将每个值从inArrayto分配给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++];
        }
    }
}
于 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

你基本上是指派 array[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];
        }
    }
}
于 2012-05-11T21:56:30.867 回答