如何使用一维数组中的值填充二维数组?
How to populate a 2d array with values from a 1d array?
我有一个数组,其中填充了我从另一种方法收到的一些值,我想用第一个方法中的值填充一个二维数组,例如:
int[] singleArray; // there's no values here to demonstrate,
// let's think that's populated
int[][] bidimArray = new int[80][80];
for (int i = 0; i < 80; i++) {
for (int j = 0; j < 80; j++) {
for (int x = 0; x < singleArray.length; x++) {
bidimArray[i][j] = singleArray[x];
}
}
}
我在上面的解决方案中想到,除了看起来很丑陋的解决方案之外,它只将singleArray
的最后一个位置保存在bidimArray[][]
中。有人可以帮帮我吗?
这里不需要第三个for
循环。这是你出错的地方。对代码的更改是简单地为输入到新二维数组中的每个值递增 x
并省略第三个 for 循环。
int[] singleArray;
int[][] bidimArray = new int[80][80];
int x = 0;
for (int i = 0; i < 80; i++) {
for (int j = 0; j < 80; j++) {
bidimArray[i][j] = singleArray[x];
x++;
}
}
你也可以像这样在循环中组合两条内线:
bidimArray[i][j] = singleArray[x++];
正如评论中所指出的,您不应该对数组大小进行硬编码。对于您的方法,您必须确保 singleArray
包含 至少 80*80
元素。如果没有给出,您应该确保事先检查该约束。
使用一维数组 6
中的值循环填充二维数组 8x7
。无论大小如何,它都适用于更大和更小的数组:
int[] arr1 = {1, 2, 3, 4, 5, 6};
int m = 8;
int n = 7;
int[][] arr2 = IntStream.range(0, m)
.mapToObj(i -> IntStream.range(0, n)
.map(j -> arr1[(j + i * n) % arr1.length])
.toArray())
.toArray(int[][]::new);
// output
Arrays.stream(arr2).map(Arrays::toString).forEach(System.out::println);
[1, 2, 3, 4, 5, 6, 1]
[2, 3, 4, 5, 6, 1, 2]
[3, 4, 5, 6, 1, 2, 3]
[4, 5, 6, 1, 2, 3, 4]
[5, 6, 1, 2, 3, 4, 5]
[6, 1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 1]
[2, 3, 4, 5, 6, 1, 2]
另请参阅:
我有一个数组,其中填充了我从另一种方法收到的一些值,我想用第一个方法中的值填充一个二维数组,例如:
int[] singleArray; // there's no values here to demonstrate,
// let's think that's populated
int[][] bidimArray = new int[80][80];
for (int i = 0; i < 80; i++) {
for (int j = 0; j < 80; j++) {
for (int x = 0; x < singleArray.length; x++) {
bidimArray[i][j] = singleArray[x];
}
}
}
我在上面的解决方案中想到,除了看起来很丑陋的解决方案之外,它只将singleArray
的最后一个位置保存在bidimArray[][]
中。有人可以帮帮我吗?
这里不需要第三个for
循环。这是你出错的地方。对代码的更改是简单地为输入到新二维数组中的每个值递增 x
并省略第三个 for 循环。
int[] singleArray;
int[][] bidimArray = new int[80][80];
int x = 0;
for (int i = 0; i < 80; i++) {
for (int j = 0; j < 80; j++) {
bidimArray[i][j] = singleArray[x];
x++;
}
}
你也可以像这样在循环中组合两条内线:
bidimArray[i][j] = singleArray[x++];
正如评论中所指出的,您不应该对数组大小进行硬编码。对于您的方法,您必须确保 singleArray
包含 至少 80*80
元素。如果没有给出,您应该确保事先检查该约束。
使用一维数组 6
中的值循环填充二维数组 8x7
。无论大小如何,它都适用于更大和更小的数组:
int[] arr1 = {1, 2, 3, 4, 5, 6};
int m = 8;
int n = 7;
int[][] arr2 = IntStream.range(0, m)
.mapToObj(i -> IntStream.range(0, n)
.map(j -> arr1[(j + i * n) % arr1.length])
.toArray())
.toArray(int[][]::new);
// output
Arrays.stream(arr2).map(Arrays::toString).forEach(System.out::println);
[1, 2, 3, 4, 5, 6, 1]
[2, 3, 4, 5, 6, 1, 2]
[3, 4, 5, 6, 1, 2, 3]
[4, 5, 6, 1, 2, 3, 4]
[5, 6, 1, 2, 3, 4, 5]
[6, 1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 1]
[2, 3, 4, 5, 6, 1, 2]
另请参阅: