用Java初始化数组的列

时间:2015-03-22 17:59:22

标签: java arrays multidimensional-array

我有三个相同长度的数组(我将在后面对它进行排序):

double abc[][] = {
    Arrays.copyOf(a, a.length),
    Arrays.copyOf(b, a.length),
    Arrays.copyOf(c, a.length)
};

当我打电话

System.out.println(Arrays.deepToString(abc));

我接受了:

[[4.0, 2.0, 1.3333333333333333, 5.0, 2.5, 1.6666666666666667 ....

但是,我更喜欢这样的东西:

[[1.0, 1.0, 4.0], [2.0, 2.0, 5.0], [3.0, 3.0, 7.0]]

这可以使用双单一

double test[][] = {{1,1,4},{2,2,5},{3,3,7}};

如何使用三个double []填充/初始化三列?


编辑:

基于vojta答案的解决方案:

double abcT[][] = new double[abc[0].length][abc.length];
    for (int i = 0; i < abc.length; i++) {
         for (int j = 0; j < abc[0].length; j++) {
            abcT[j][i] = abc[i][j];
         }
      }
System.out.println(Arrays.deepToString(abcT));

2 个答案:

答案 0 :(得分:1)

不幸的是,我认为你的问题没有一线解决方案。您将不得不使用一些自制代码:

static <T> T[][] createMatrix(T[]... columns) {
  if (columns== null || columns.length == 0)
    return new T[0][0];

  int wid = columns.length;
  int ht = columns[0].length;

  T[][] result = new T[ht][wid];

  for (int x = 0; x < wid; x++) {
    for (int y = 0; y < ht; y++) {
      result[y][x] = columns[x][y];
    }
  }
  return result;
}

我希望它很有用。

答案 1 :(得分:0)

我终于达到了这个更优雅的解决方案:

    for (int i = 0; i < a.length; i++){
            abc[0][i] = a[i];
            abc[1][i] = b[i];
            abc[2][i] = c[i];
    }

虽然它不是n []的通用解决方案,但这避免了制作原始数组的中间副本的需要。然后我只是为行和列交换for循环:

    for (int j = 0; j < abc[0].length; j++) {
        for (int i = 0; i < abc.length; i++) {
            System.out.print(abc[i][j] + " ");
        }
        System.out.print("\n");
    }

注意:此解决方案不以预期的R:C格式存储,而是在C:R中检索。