在java中编辑对象2d数组的字段

在java中编辑对象2d数组的字段,java,arrays,field,Java,Arrays,Field,目标是将一些平铺对象和自定义特性复制到二维阵列中,但我得到了意想不到的结果: for (int i = 0; i<3; i++) { for (int j = 0; j<3; j++) { TileList[i][j] = Tiles[3]; //the goal is the overwrite the MapX and MapY fields of each element of th

目标是将一些平铺对象和自定义特性复制到二维阵列中,但我得到了意想不到的结果:

    for (int i = 0; i<3; i++)
    {
        for (int j = 0; j<3; j++)
        {
            TileList[i][j] = Tiles[3];
            //the goal is the overwrite the MapX and MapY fields of each element of the new Array 
            TileList[i][j].MapX = i;
            TileList[i][j].MapY = j; 
        }
    }

for(int i=0;i使用以下语句将所有数组成员设置为同一对象:

    TileList[i][j] = Tiles[3];
该语句复制对对象的引用,而不是对象本身

在最后一次通过循环时,所有数组成员都指向同一个对象,这些语句将其成员设置为3和3:

    TileList[i][j].MapX = i;
    TileList[i][j].MapY = j; 
如果希望所有数组成员指向不同的对象,可以使用默认构造函数为每个对象创建一个新对象:

    TileList[i][j] = new Tile();
或复制另一个对象的构造函数:

    TileList[i][j] = new Tile( myDefaultTile );
clone()
方法(如果您支持):

    TileList[i][j] = myDefaultTile.clone();
另请注意,在Java中,变量和类成员的名称通常以小写字母开头。例如:

    tileList[i][j].mapX = i;

您的解决方案起作用了,这带来了另一个问题,为什么需要使用Tile[][]TileList=新Tile[][];在循环之前实例化,最初它不起作用,并且得到了一个空指针验证,直到我使用了上面的语句。您必须先创建数组,然后才能将内容放入其中。创建矩形二维数组的最简单方法是预先指定这两个维度,例如,
Tile[][]tileList=new Tile[3][3]
。它创建一个包含空引用的数组,您可以用
新磁贴()填充该数组。