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

Java 将对象添加到此arraylist时,它们将变得完全相同,java,arraylist,Java,Arraylist,好的,上面的代码应该用一个TileEntity tile填充该层。当我在this.tiles.addtile行之前打印出x和y坐标时,每个磁贴都有不同的坐标。但是当我打印出ArrayList tiles中所有tiles的x和y坐标时,每个tiles都是9,9。它们都与添加到arraylist的最后一个磁贴相同。谢谢 在for循环中不断添加相同的对象 如果要添加不同的对象,则需要使用例如new TileEntity创建新实例 在您的代码示例中,值在每次循环中都会更改,这是正确的,但是由于平铺在每次

好的,上面的代码应该用一个TileEntity tile填充该层。当我在this.tiles.addtile行之前打印出x和y坐标时,每个磁贴都有不同的坐标。但是当我打印出ArrayList tiles中所有tiles的x和y坐标时,每个tiles都是9,9。它们都与添加到arraylist的最后一个磁贴相同。谢谢

在for循环中不断添加相同的对象

如果要添加不同的对象,则需要使用例如new TileEntity创建新实例

在您的代码示例中,值在每次循环中都会更改,这是正确的,但是由于平铺在每次迭代中都指向同一个对象,因此您只会更改该对象中的x和y值。当您更改x和/或y时,Java不会为您创建新对象。将平铺添加到数组this.tiles时,它将引用您添加的对象-它不会复制它


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

您已经成功地将相同的tile添加到ArrayList 100次。这里仍然只有一个对象,所以最后一次更新获胜:x=9和y=9


如果需要不同的值,则必须添加100个不同的平铺对象,每个对象都有各自不同的值。

每次循环中都需要创建新的平铺对象,否则每次现有平铺对象更改并保留上次插入的值

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);
        }
    }
}

给我们调试器。它帮助显示是否声明了对象平铺?Turbo-对象平铺声明为继承抽象类TileEntityB的类,但对象的值每次都会更改?将相同的对象添加到数组中的每个位置。每次更改.x和.y时,都会对数组的所有位置进行更改。您需要在第二个for循环开始时创建对象的新实例。瓷砖=新瓷砖厚度;但是TileEntity是抽象的,那么“新TileEntity”将不起作用-您需要创建一个具体的子类。示例“新TileEntityImplementation”。问题是TileEntity是abstract@user2155333那么您是如何接收瓷砖对象的??你能说明你是如何调用这个方法的吗?
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);
        }
    }
}
 for(int j = 0; j < this.width; j++){
            tile= new TileEntity();
            tile.x = j;
            tile.y = i;
            this.tiles.add(tile);
        }