将对象添加到此arraylist时,它们都变得相同

use*_*333 0 java arraylist

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相同.谢谢!

and*_*rel 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你是正确的,在你的代码示例中,值的变化每次都在循环时间,但因为tile指向同一个对象每次迭代,你只会改变xy范围内该对象.(当您更改x和/或时,Java不会为您创建新对象y).当您添加tile到数组时this.tiles,它将reference添加您添加的对象 - 它不会复制它.

所有的一切,tile 你的阵列中的每个对象将指向相同的单个实例TileEntity.