[英]Returning a 2d array from inputed 1d array
我想采用1x6
的输入 1d 数组并将其返回到3x2
的 2d 数组中。 我想我已经弄清楚了,但是在我的代码中,我一直需要这个错误数组,但找到了int
。 我认为这是由于输入数组是一维数组而不是二维数组,但我不确定。 谁能帮我解决这个问题?
例子:
int[] d = {4, 1, 20, 45, 2, 31};
返回一个 2D 数组3x2
Output:
4 1
20 45
2 31
错误:
transmo[j][i] = d[i][j];
array required, but int found
我的代码如下:
public class mypractice {
public void a_three_by_two(int[] d) {
int transmo[][] = new int[3][2];
for (int i = 0; i < 1; i++) {
for (int j = 0; j < 6; j++) {
transmo[j][i] = d[i][j];
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
System.out.print(transmo[i][j] + "\t");
}
System.out.println();
}
}
}
您的第一组循环需要与第二组循环相同,否则transmo[i][j]
将失败。
然后,您需要将索引计算为d
。
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
transmo[i][j] = d[i * 2 + j];
}
}
迭代一维数组,然后使用模数和余数索引二维 output 数组:
public int[][] a_three_by_two(int[] d, int nrow, int ncol) {
int transmo[][] = new int[nrow][ncol];
for (int i=0; i < d.length; ++i) {
int row = i / ncol;
int col = i % ncol;
transmo[row][col] = d[i];
}
return transmo;
}
int[] d = {4, 1, 20, 45, 2, 31};
int[][] output = a_three_by_two(d, 2, 3);
System.out.println(Arrays.deepToString(output));
这打印:
[[4, 1], [20, 45], [2, 31]]
这里的逻辑是,对于输入一维数组,每两步,我们将行索引增加一,并根据除以二后的余数增加列索引。
请注意,此版本的代码非常灵活,适用于任何二维二维数组。
由于 d[] 是一维数组,您应该使用 d[index] 访问它。 这里你需要做的是解决tansmo的索引和d的索引之间的关系
所以你的循环会是这样的:
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++){
transmo[i][j] = d[2*i+j];
}
}
您可以使用流从一维数组创建和填充新的二维数组:
int[] arr1d = {4, 1, 20, 45, 2, 31};
// index of the element in the 1d array
AtomicInteger i = new AtomicInteger(0);
// create and populate a new 2d array '3x2'
int[][] arr2d = IntStream.range(0, 3)
.mapToObj(row -> IntStream.range(0, 2)
// take the element from the 1d
// array and increment the index
.map(j -> arr1d[i.getAndIncrement()])
.toArray())
.toArray(int[][]::new);
// output
System.out.println(Arrays.deepToString(arr2d));
// [[4, 1], [20, 45], [2, 31]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.