处理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);
    }
}