我把它作为我的主类,它创建了另一个类的二维数组:
public class Tic {
public static void main(String[] args) {
XO board[][] = new XO[3][3];
System.out.println(board[1][1]);
}
}
这是作为2D数组创建的对象类:
public class XO {
private String name = "";
public XO() {
name = "O";
}
public String toString() {
return name;
}
}
从主类'Tic'可以看出,我正在尝试打印对象板[1] [1]的'name'变量。我希望它打印字符串'o',但相反,它打印为null。当XO的构造函数明确将其“name”变量设置为“o”时,为什么会发生这种情况?
答案 0 :(得分:3)
你所做的就是创建一个XO
的数组。但这并没有初始化其子元素,这就是为什么你得到null
值:
XO board[][] = new XO[3][3];
for(int i = 0; i < board.length; i++)
for(int j = 0; j < board[i].length; j++)
board[i][j] = new XO();
System.out.println(board[1][1]);
答案 1 :(得分:1)
默认情况下,Java中的数组使用null
进行初始化。
因此,访问时会出现null
或NullPointerException。
如果你想要可变对象,你需要一个for
循环。
或者,您可以这样做(这可能是最优雅的方法):
enum XO { X, O, E };
XO[][] board = new XO[][]{{E,E,E},{E,E,E},{E,E,E}};
答案 2 :(得分:1)
您需要先给board[1][1]
一个值:
XO board[][] = new XO[3][3];
board[1][1] = new XO();
System.out.println(board[1][1]);
这应按预期打印O
。
答案 3 :(得分:1)
首先应该将new XO()
添加到数组中,如下所示:
XO[][] board = new XO[3][3];
board[1][1] = new XO();
System.out.println(board[1][1]);
因为在数组之前是空的。
答案 4 :(得分:0)
在java中,任何维度的所有数组都使用默认值初始化每个单元格。当数组类型是基本类型时,此默认值为null。所有数值都初始化为0
(包括char
,初始化为\u0000
。boolean
数组将每个单元格初始化为false
。
答案 5 :(得分:-1)
如果要打印出name变量,必须调用方法toString()。
System.out.println(board[1][1].toString());
答案 6 :(得分:-1)
感谢Mohammed Aouf ZOUAG,我能够找出问题所在。 我用
创建 2D数组XO board[][] = new XO[3][3];
但我没有用
初始化 board[i][j] = new XO();