将对象初始化为2D阵列然后打印它

时间:2016-02-14 22:34:51

标签: java arrays multidimensional-array

我把它作为我的主类,它创建了另一个类的二维数组:

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”时,为什么会发生这种情况?

7 个答案:

答案 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,初始化为\u0000boolean数组将每个单元格初始化为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();