处理3中二维数组的变化值
Change value of Two-Dimensional Array in Processing 3
我正在使用 Processing 3 制作单人战舰游戏。
为了生成运动场,我创建了一个二维数组,其中包含一个布尔值,表示网格单元是否已被单击。为了生成这个数组,我使用以下函数:
boolean[][] clicked = {};
void initArray(int gridSize) {
boolean[] row = {};
for (int i = 0; i < gridSize; i++) row = (boolean[]) append(row, false);
for (int i = 0; i < gridSize; i++) clicked = (boolean[][]) append(clicked, row);
}
我遇到的问题是,每当我尝试将一个单元格的值更改为 true 时,该行中的所有值也会变为 true。这是我用来更改和打印数组的代码:
void setup() {
initArray(3);
clicked[2][1] = true;
println(clicked[0]);
println(clicked[1]);
println(clicked[2]);
}
我只想更改第三行的第二个值,但它却更改了每一行的第二个值。这是输出:
[0] false
[1] true
[2] false
[0] false
[1] true
[2] false
[0] false
[1] true
[2] false
我不允许在这个作业中使用 OOP。
提前致谢。
您只创建一个 row
对象并将该对象附加到每一行。最后每一行都引用相同的 row
对象。所以似乎改变一行的元素也会影响其他行。
为网格的每一行创建一个 row
对象,以解决您的问题:
boolean[][] clicked = {};
void initArray(int gridSize) {
for (int i = 0; i < gridSize; i++) {
boolean[] row = {}; // <--- new object for each row
for (int j = 0; j < gridSize; j++)
row = (boolean[]) append(row, false);
clicked = (boolean[][]) append(clicked, row);
}
}
我正在使用 Processing 3 制作单人战舰游戏。 为了生成运动场,我创建了一个二维数组,其中包含一个布尔值,表示网格单元是否已被单击。为了生成这个数组,我使用以下函数:
boolean[][] clicked = {};
void initArray(int gridSize) {
boolean[] row = {};
for (int i = 0; i < gridSize; i++) row = (boolean[]) append(row, false);
for (int i = 0; i < gridSize; i++) clicked = (boolean[][]) append(clicked, row);
}
我遇到的问题是,每当我尝试将一个单元格的值更改为 true 时,该行中的所有值也会变为 true。这是我用来更改和打印数组的代码:
void setup() {
initArray(3);
clicked[2][1] = true;
println(clicked[0]);
println(clicked[1]);
println(clicked[2]);
}
我只想更改第三行的第二个值,但它却更改了每一行的第二个值。这是输出:
[0] false
[1] true
[2] false
[0] false
[1] true
[2] false
[0] false
[1] true
[2] false
我不允许在这个作业中使用 OOP。 提前致谢。
您只创建一个 row
对象并将该对象附加到每一行。最后每一行都引用相同的 row
对象。所以似乎改变一行的元素也会影响其他行。
为网格的每一行创建一个 row
对象,以解决您的问题:
boolean[][] clicked = {};
void initArray(int gridSize) {
for (int i = 0; i < gridSize; i++) {
boolean[] row = {}; // <--- new object for each row
for (int j = 0; j < gridSize; j++)
row = (boolean[]) append(row, false);
clicked = (boolean[][]) append(clicked, row);
}
}