像 Python 样式一样将数组添加到数组中
Add array into array like a Python style
我正在尝试将一个数组添加到另一个数组中。
代码:
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 (visualization of work) 的元素,我的 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 行”等来查看这个问题...”,但是我正在看这个问题 “我在 table 上有 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 语言的代码不起作用?
我该如何解决?
another 4 stuffs put in to another 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];
}
}
您必须为每一行创建一个新数组。
int[] headArray = { 16, 3, 2, 13, 5, 10, 11, 8, 9, 6, 7, 12, 4, 15, 14, 1 };
int[][] array2D = new int[4][];
for (int i = 0, j = 0; i < headArray.length; i += 4, ++j)
array2D[j] = Arrays.copyOfRange(headArray, i, i + 4);
System.out.println(Arrays.deepToString(array2D));
输出:
[[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]
我正在尝试将一个数组添加到另一个数组中。
代码:
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 (visualization of work) 的元素,我的 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 行”等来查看这个问题...”,但是我正在看这个问题 “我在 table 上有 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 语言的代码不起作用? 我该如何解决?
another 4 stuffs put in to another 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];
}
}
您必须为每一行创建一个新数组。
int[] headArray = { 16, 3, 2, 13, 5, 10, 11, 8, 9, 6, 7, 12, 4, 15, 14, 1 };
int[][] array2D = new int[4][];
for (int i = 0, j = 0; i < headArray.length; i += 4, ++j)
array2D[j] = Arrays.copyOfRange(headArray, i, i + 4);
System.out.println(Arrays.deepToString(array2D));
输出:
[[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]]