Java中的2d数组返回null结果

时间:2013-11-19 12:58:03

标签: java null multidimensional-array

我正在尝试使用Java中的2D数组制作文本游戏的装甲系统。我已经把这一切都想到了,但代码似乎没有用。

public static String[][] armour = new String[2][3];
{
    armour[0][0] = "shirt";
    armour[0][1] = "plate";
    armour[0][2] = "iron";
    armour[1][0] = "1";
    armour[1][1] = "0.75";
    armour[1][2] = "0.5";
}
public static void main(String[] args) {
    System.out.println(armour[0][1]);
}

这应该返回“盘子”,但它没有,我一直在查找,修改它和各种各样的现在几个小时,我不能为我的生活搞清楚。这里有人知道吗?

2 个答案:

答案 0 :(得分:5)

您正在使用实例初始化程序块,您应该使用静态程序块。

public static String[][] armour = new String[2][3];
static {
    armour[0][0] = "shirt";
    armour[0][1] = "plate";
    armour[0][2] = "iron";
    armour[1][0] = "1";
    armour[1][1] = "0.75";
    armour[1][2] = "0.5";
}

试试这个就行了。您没有创建类的实例,并且只有在创建实例时才会运行没有static关键字的任何块。

另一个选择是使用数组初始化块:

public static String[][] armour =
        {{"shirt", "plate", "iron"},{"1", "0.75", "0.5"}};

我有一些评论:

  • public static变量正在寻找麻烦。使用private变量或常量(public static final
  • 您应该将护甲信息移至其单独的班级使用Map来存储键值对:shirt -> 1

答案 1 :(得分:1)

创建静态初始值设定项:

static {
    armour[0][0] = "shirt";
    armour[0][1] = "plate";
    armour[0][2] = "iron";
    armour[1][0] = "1";
    armour[1][1] = "0.75";
    armour[1][2] = "0.5";
}

否则,您必须拥有一个类实例才能执行代码块。

更多信息: