繁体   English   中英

在Java中编辑对象2D数组的字段

[英]Editing fields of an object 2d array in java

目标是将一些Tile对象和自定义属性复制到2D数组中,但是我得到了意外的结果:

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

在打印出每个元素的值之后,每个元素的每个MapX和MapY字段均应具有各自独立的值,但是对于2d数组中的每个图块对象引用,MapX和MapY均设置为3。

您可以使用以下语句将所有数组成员设置为同一对象:

    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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM