我试图将二维数组展平为一维数组。这就是我现在拥有的。我希望扁平化我的数组,以便一维数组看起来像这样
int[] oneDim = {1, 2, 3, 4, 5, 6, 7, 8 ,9 ,10, 11, 12};
这就是我现在拥有的。我真的不知道如何去做这件事。感谢所有帮助和意见。
void setup() {
int[][] twoDim = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12} };
int[] oneDim = new int[twoDim.length];
for (int i = 0; i < twoDim.length; i++) {
for (int j = 0; j < twoDim[i].length; j++) {
oneDim[j] += twoDim[j][i];
}
}
println(oneDim);
}
答案 0 :(得分:1)
这是一个提示:将两个维度映射到一个维度的常用公式是:width*y + x
,其中width
是每行中的元素数(在您的情况下为4,由{{给出) 1}},假设它们的长度都相同),'x'是列上的迭代器(twoDim[i].length
,在你的情况下),j
是行上的迭代器(y
为了你)。
您需要检查一维数组的大小是否足以接受i
的所有元素。它看起来不够大 - 它至少需要twoDim
个元素。
您目前正在反复编写同一行数据,因为您在内部循环中为外循环的每次迭代分配twoDim[i].length * twoDim.length
。尝试使用我在本答案开头建议的公式来分配oneDim[j]
(一旦它具有适当的大小)。
答案 1 :(得分:1)
int[][] twoDim = { {1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12} };
int x = twoDim.length;
int y = twoDim[0].length;
int[] oneDim = new int[x*y];
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
oneDim[i*y + j] = twoDim[i][j];
}
}
println(oneDim);