public void fillWith(TileEntity tile){
for(int i = 0; i < this.height; i++){//for every x and y value
for(int j = 0; j < this.width; j++){
tile.x = j;
tile.y = i;
this.tiles.add(tile);
}
}
}
好的,上面的代码应该用 TileEntity 磁贴填充关卡。当我在“this.tiles.add(tile)”行之前打印出 x 和 y 坐标时,每个图 block 都有不同的坐标。但是,当我打印出 ArrayList“图 block ”中所有图 block 的 x 和 y 坐标时,每个图 block 都是 (9,9)。它们都与添加到数组列表中的最后一个图 block 相同。谢谢!
最佳答案
您不断在 for 循环中添加相同的对象。
如果您想添加不同的对象,则需要使用 new TileEntity()
创建新实例。
public void fillWith(){
TileEntity tile;
for(int i = 0; i < this.height; i++){//for every x and y value
for(int j = 0; j < this.width; j++){
tile = new TileEntity();
tile.x = j;
tile.y = i;
this.tiles.add(tile);
}
}
}
你是对的,在你的代码示例中,每次进入循环时值都会发生变化,但是因为 tile
每次迭代都指向同一个对象,所以你只会更改 该对象内的 x
和 y
值。 (当您更改 x
和/或 y
时,Java 不会为您创建新对象)。当您将tile
添加到数组this.tiles
时,它将引用
您添加的对象 - 它不会复制它。
总而言之,tile
和数组中的每个对象都将指向 TileEntity
的同一个实例。
关于java - 将对象添加到此数组列表时,它们都变得相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711789/