0

我正在尝试将二维数组展平为一维数组。这是我目前拥有的。我想要展平我的数组,使一维数组看起来像这样

   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);
  }
4

2 回答 2

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);
于 2012-11-06T01:42:30.527 回答
1

这里有一个提示:将二维映射到一个的常用公式是:width*y + x,其中width是每行中的元素数(在你的情况下,4,twoDim[i].length假设它们都是相同的长度),'x' 是列上的迭代器(j在您的情况下是 ),并且y是行上的迭代器(i为您)。

您需要检查一维数组的大小是否足以接受twoDim. 它看起来不够大 -twoDim[i].length * twoDim.length至少它需要很长的元素。

您当前正在一遍又一遍地写入同一行数据,因为您要oneDim[j]在内部循环中为外部循环的每次迭代分配 to。尝试oneDim使用我在此答案开头建议的公式分配给(一旦它具有适当的大小)。

于 2012-11-06T01:37:58.690 回答