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

jutyujz0  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(420)

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

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[][] . 有人能帮我吗?

ycggw6v2

ycggw6v21#

不需要第三个 for 在这里循环。这就是你错的地方。对代码的更改只是简单地增加 x 对于输入到新2d数组中的每个值,忽略第三个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 元素。如果没有给出,您应该确保事先检查该约束。

sc4hvdpw

sc4hvdpw2#

二维数组的循环填充 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, 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]

另请参见:将一维阵列复制到二维阵列

相关问题