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

The*_*ymo 0 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]);
}
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*old 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";
}
Run Code Online (Sandbox Code Playgroud)

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

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

public static String[][] armour =
        {{"shirt", "plate", "iron"},{"1", "0.75", "0.5"}};
Run Code Online (Sandbox Code Playgroud)

我有一些评论:

  • public static变量要求麻烦.使用private变量或常量(public static final)
  • 您应该将护甲信息移动到其单独的类中,使用a Map来存储键值对:shirt -> 1

  • 当然,或者作为声明的一部分进行初始化. (3认同)