我正在尝试获取包含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];
}
}
}
}
我做错了什么?
答案 0 :(得分:3)
对于每对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++];
}
}
}
答案 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];
}
}
}