2d 对象数组不会创建新对象,只是覆盖



所以我在 Java 中有一个二维数组,其中数组中的每个单元格都是一个 Chunk 区块包含有关其位置的信息。 问题是在我的 for 循环中似乎正在发生的事情是,每次我创建一个新的块时,我只是覆盖了有关所有先前块的信息

这是我的代码

public static int worldsize = 5;
public static Chunk[][] chunks = new Chunk[worldsize][worldsize];
public CreateWorld(){
for(int i = 0; i < worldsize; i++){
for(int j = 0; j < worldsize; j++)
{
System.out.println("creating chunks at postion " + i + ", " + j);
chunks[i][j] = new Chunk(i, j);
System.out.println("chunk at positon 0, 0 : " + chunks[0][0].chunkXPos + ", " + chunks[0][0].chunkYPos);
}
}
}

这是块

public static int chunkXPos;
public static int chunkYPos;
public Chunk(int chunkX, int chunkY){
chunkXPos = chunkX;
chunkYPos = chunkY;
System.out.println(chunkXPos + ", " + chunkYPos);
cells = createChunkList().clone();
}

预期输出如下:

creating chunks at postion 3, 2
3, 2
chunk at positon 0, 0 : 0, 0
creating chunks at postion 3, 3
3, 3
chunk at positon 0, 0 : 0, 0

我实际得到的

creating chunks at postion 3, 2
3, 2
chunk at positon 0, 0 : 3, 2
creating chunks at postion 3, 3
3, 3
chunk at positon 0, 0 : 3, 2

从我每次调用时能够弄清楚的内容= new Chunk(i, j);它将有关所有其他块的所有信息设置为新坐标 所以这就是为什么位置 [0][0] 的块认为它在 [3][2]

解决方案可能非常简单,虽然我是java的新手,但我无法弄清楚

我认为这是因为你的Chunk类。您需要做的是将类中的 x 和 y 属性设置为非静态。

所以试着private int chunkYPos;private int chunkXPos;

静态变量在 Java 中该对象的所有实例之间共享。您希望这是每个块唯一的变量(至少从我对你的问题的理解来看(。

最新更新