我正在处理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用于此分配。 预先感谢。
答案 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);
}
}