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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
好的,所以上面的代码应该用TileEntity tile填充关卡.当我在"this.tiles.add(tile)"行之前打印x和y coords时,每个tile都有不同的coords.但是当我打印出ArrayList"tiles"中所有tile的x和y坐标时,每一个都是(9,9).它们都与添加到arraylist的最后一个tile相同.谢谢!
您继续在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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你是正确的,在你的代码示例中,值的变化每次都在循环时间,但因为tile指向同一个对象每次迭代,你只会改变x和y值范围内该对象.(当您更改x和/或时,Java不会为您创建新对象y).当您添加tile到数组时this.tiles,它将reference添加您添加的对象 - 它不会复制它.
所有的一切,tile 和你的阵列中的每个对象将指向相同的单个实例TileEntity.
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |