处理3中的二维数组的更改值

时间:2018-10-27 12:39:39

标签: java arrays 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用于此分配。 预先感谢。

1 个答案:

答案 0 :(得分:0)

您仅创建一个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);
    }
}