好吧,我可能正在做一些愚蠢的事情,但我无法弄清楚是什么。我需要创建一个具有初始容量的全局数组,但似乎每当我尝试时,它都会抛出一些错误。现在我有:
public class Trains {
private static final int INITIAL = 30;
private static Integer[] train1, train2, train3, train4, train5, train6 = new Integer[INITIAL];
public Trains(){ //constructor
train2[0] = 4;
}
public static void move(){
System.out.println(train2[0]);
}
当我运行它时,即使我初始化了它,当它尝试输出 train2[0] 时,我也会出现空指针异常。我也试过这个:
private static final int INITIAL = 30;
private static Integer[] train1, train2, train3, train4, train5, train6;
public Trains(){ //constructor
train1, train2, train3, train4, train5, train6 = new Integer[INITIAL];
train2[0] = 4;
}
但是它告诉我,火车1到火车6不能解析为一个类型。
在尝试设置新的 Integer(INITIAL) 时,我可能会搞砸一些东西,因为我以前从未使用过它,但我还没有找到任何东西来帮助我解决问题。
你只初始化了Integer[] train6 = new Integer[INITIAL];
其他值仍设置为 null。在 train2[0] 设置值之前,请检查 train2 是否为空。
if(train2 == null)
train2 = new Integer[INITIAL];
train2[0] = 4;
这说明清楚了吗?
附言将来,请更具体地说明您的问题到底在哪里。
替换
private static Integer[] train1, train2, train3, train4,
train5, train6 = new Integer[INITIAL];
跟
private static Integer[] train1 = new Integer[INITIAL];
private static Integer[] train2 = new Integer[INITIAL];
private static Integer[] train3 = new Integer[INITIAL];
// etcetera
是的,它很冗长,但是如果您的代码被"分解"以使用多个这样的数组变量,这就是您得到的。
我认为您应该考虑使用第一个维度为 6
的Integer[][]
。 这也可能会简化其他事情......如果你以正确的方式进行重构。
郑重声明,您的第一次尝试失败的原因是
private static Integer[] train1, train2, train3, train4,
train5, train6 = new Integer[INITIAL];
相当于
private static Integer[] train1;
private static Integer[] train2;
// etcetera.
private static Integer[] train6 = new Integer[INITIAL];
如果你看一下Java语法规则,这一点就很清楚了:例如 http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.3.2