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磁贴填充关卡。当我在行#34; this.tiles.add(tile)&#34;之前打印出x和y coords时,每个tile都有不同的coords。但是当我打印出ArrayList&#34; tiles&#34;中所有图块的x和y坐标时,每一个都是(9,9)。它们都与添加到arraylist的最后一个tile相同。谢谢!
答案 0 :(得分:7)
您继续在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
和<{1}} 对象中的值。 (当您更改y
和/或x
时,Java不会为您创建新对象。当您向数组y
添加tile
时,它会this.tiles
您添加的对象 - 它不会复制它。
总而言之,reference
和数组中的每个对象都将指向同一个tile
实例。
答案 1 :(得分:1)
您已成功将相同的tile
添加到ArrayList
100次。此处仍然只有一个对象,因此上次更新“获胜”:x = 9
和y = 9
。
如果你想要不同的值,那么你必须添加100个不同的平铺对象,每个对象都有自己不同的值。
答案 2 :(得分:1)
每次在循环中都需要创建新的tile对象,否则每次现有的tile对象都会更改并保留最后插入的值。
for(int j = 0; j < this.width; j++){
tile= new TileEntity();
tile.x = j;
tile.y = i;
this.tiles.add(tile);
}