繁体   English   中英

将一维阵列变成二维阵列

[英]Turning a 1-D Array into a 2-D Array

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

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

我究竟做错了什么?

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

您正在将输入数组中的最后一个元素分配给输出数组中的每个元素。 输入数组上的内部循环必须更改为单个分配,以选择正确的输入元素。

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
        }
    }
}

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

您不应在同一循环中迭代z而应将其用作计数器。

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

您基本上是在将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];
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM