gpt4 book ai didi

java - 将对象添加到此数组列表时,它们都变得相同

转载 作者:行者123 更新时间:2023-12-01 06:52:48 25 4
gpt4 key购买 nike

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 每次迭代都指向同一个对象,所以你只会更改 该对象内的 xy 值。 (当您更改 x 和/或 y 时,Java 不会为您创建新对象)。当您将tile添加到数组this.tiles时,它将引用您添加的对象 - 它不会复制它。

总而言之,tile 数组中的每个对象都将指向 TileEntity 的同一个实例。

关于java - 将对象添加到此数组列表时,它们都变得相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20711789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com