首页 > 解决方案 > 像 Python 风格一样将数组添加到数组中

问题描述

我正在尝试将一个数组添加到另一个数组中。

代码:

int[] headArray = {16, 3, 2, 13,
               5, 10, 11, 8,
               9, 6, 7, 12,
               4, 15, 14, 1};
int[] miniArray = new int[4]; // helpArray
int[][] array2D = new int[4][4];

int count = 0;
int countIndex = 0;

for (int i = 0; i < headArray.length; i++) {
    miniArray[count] = headArray[i];
    count++;
    if (count == 4) {
        array2D[countIndex] = miniArray;
        count = 0;
        countIndex++;
        // reset miniArray ? how? de-likn array? how?
    }
}

当我可视化它时,我看到第一个循环正确填充 miniArray,然后, miniArray 将被放入 array2D 以正确索引 0,但在下一步中,array2D 的所有索引都“链接”到 miniArray 的最后一个数组元素(可视化的工作)循环后,我的array2D 将是:

array2D = {{4, 15, 14, 1},{4, 15, 14, 1},{4, 15, 14, 1},{4, 15, 14, 1}}

这是我所期望的:

array2D = {{16, 3, 2, 13},{5, 10, 11, 8},{9, 6, 7, 12},{4, 15, 14, 1}}

当然,我知道正确答案,可以通过以下方式解决:

int k = 0;

for (int i = 0; i < array2D.length; i++) {
    for (int j = 0; j < array2D[0].length; j++) {
        array2D[i][j] = headArray[k];
        k++;
    }
}

但是,它是像“我正在通过“第 0 行、第 0 行、第 1 行、第 0 单元”等来查看这个问题的问题的解决方案,但我正在查看这个问题,例如“我有 16 个东西在桌子上,我将其中的 4 个放入 miniBox 中,然后将 miniBox 放入 bigBox,然后再将另外 4 个东西放入另一个 miniBox 之后,将 miniBox 放入 bigBox 等”,就像 Python 风格一样:

headArray = [16, 3, 2, 13, 5, 10, 11, 8, 9, 6, 7, 12, 4, 15, 14, 1]

count = 0

for i in range(16): # or range(len(headArray))
    miniArray.append(headArray[i])
    count += 1
    if count == 4:
        array2D.append(miniArray)
        count = 0
        miniArray= []

为什么我的 Python 重新翻译成 Java 语言的代码不起作用?我该如何解决?

标签: pythonjavaarraysloopsadd

解决方案


将另外 4 个东西放入另一个 miniBox

这是你需要做的,但不是你正在做的。您将接下来的 4 个东西放入同一个 miniBox。

要创建一个新的miniBox,您需要在以下行之后创建:

// reset miniArray ? how? de-likn array? how?
miniArray = new int[4];

所以完整的循环是这样的:

    for (int i = 0; i < headArray.length; i++) {
        miniArray[count] = headArray[i];
        count++;
        if (count == 4) {
            array2D[countIndex] = miniArray;
            count = 0;
            countIndex++;
            // reset miniArray ? how? de-likn array? how?
            miniArray = new int[4];
        }
    }

推荐阅读