如何使用一维数组中的值填充二维数组?

问题描述

我有一个数组,其中填充了我从另一种方法接收到的一些值,我想用第一个值填充一个二维数组,例如:

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];
        }
    }
}

我想在上面的解决方案中,除了看起来很丑的解决方案之外,它只保存了singleArraybidimArray[][]的最后一个位置。请问有人可以帮我吗?

解决方法

这里不需要第三个 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 元素。如果没有给出,您应该确保事先检查该约束。

,

使用来自一维数组 8x7 的值循环填充二维数组 6。无论大小如何,它都适用于更大和更小的数组:

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,6,1]
[2,1,2]
[3,3]
[4,4]
[5,5]
[6,6]
[1,2]

另见:Copying a 1d array to a 2d array

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...