我有三个相同长度的数组(我将在后面对它进行排序):
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));
答案 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中检索。