Java:如何操作数组中自定义对象的变量?Tile数组赋值示例
嘿,我来帮你理清这个问题!首先要注意的是,你创建的二维数组Tile[][] board = new Tile[8][8];只是搭建了数组的框架,里面的每个Tile元素一开始都是null——也就是说,还没有真正创建Tile对象呢。所以第一步得先把对象实例化,才能设置它的属性。
1. 给单个Tile对象(比如board[0][0])设置属性的两种方式
方式一:通过构造函数直接初始化(推荐,一步到位)
因为你的Tile类已经有了接收name和color的构造函数,所以可以直接创建对象并赋值给数组元素,同时完成属性设置:
board[0][0] = new Tile("A1", 255);
这行代码会创建一个name为"A1"、color为255的Tile对象,然后把它放到board[0][0]的位置上。
方式二:先实例化再修改属性(适合需要后续调整的场景)
如果已经先把Tile对象放到数组里了(比如先调用带参构造初始化一个默认值),可以直接访问属性修改(因为你的name和color是包访问权限,没有加private):
// 先创建一个默认的Tile对象放到board[0][0] board[0][0] = new Tile("", 0); // 然后修改属性 board[0][0].name = "A1"; board[0][0].color = 255;
不过更规范的做法是给Tile类添加private修饰的属性和对应的setter/getter方法,这样符合面向对象的封装原则:
public class Tile { private String name; private int color; public Tile(String n, int c){ name = n; color = c; } // 获取name public String getName() { return name; } // 设置name public void setName(String name) { this.name = name; } // 获取color public int getColor() { return color; } // 设置color public void setColor(int color) { this.color = color; } }
之后修改属性就可以用setter方法:
board[0][0].setName("A1"); board[0][0].setColor(255);
2. 给二维数组中所有Tile对象设置属性
可以用嵌套循环遍历数组的每一个位置,逐个创建Tile对象并设置属性。比如我们可以根据行列索引生成有规律的name(像棋盘的坐标),再给color设置自定义规则:
for (int row = 0; row < board.length; row++) { for (int col = 0; col < board[row].length; col++) { // 生成类似"A1"、"B1"、"A2"这样的name String tileName = (char)('A' + col) + String.valueOf(row + 1); // 比如让棋盘黑白相间,偶数和为255,奇数和为0 int tileColor = (row + col) % 2 == 0 ? 255 : 0; // 创建Tile对象并赋值给数组元素 board[row][col] = new Tile(tileName, tileColor); } }
这样循环执行完后,board数组里的每一个位置都有了初始化好的Tile对象,每个对象都有对应的name和color。
内容的提问来源于stack exchange,提问作者Grant Cridlebaugh
相关产品推荐
相关产品推荐

