[英]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];
}
}
}
}
我究竟做错了什么?
对于每对x
和y
,您的代码将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.