好吧,我可能做了一些愚蠢的事,但我无法弄清楚是什么。我需要创建一个具有初始容量的全局数组,但只要我尝试,它就会抛出一些错误。现在我有:
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;
}
但后来它告诉我,train1到train6无法解析为某种类型。
我在尝试设置新的整数(INITIAL)时可能会弄乱一些东西,因为我之前从未使用过它,但我还没有找到任何可以帮助我找出问题的东西。
答案 0 :(得分:0)
您刚刚初始化了Integer[] train6 = new Integer[INITIAL];
其他人仍设为null。在train2 [0]设置值之前,检查train2是否为空。
if(train2 == null)
train2 = new Integer[INITIAL];
train2[0] = 4;
这是否说清楚了?
P.S。将来,更具体地说明问题的确切位置。
答案 1 :(得分:0)
替换
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
是的,它很冗长,但如果您的代码被“制定”以使用多个这样的数组变量,那就是您所获得的。
我认为您应该考虑使用第一维为Integer[][]
的{{1}}。这可能会简化其他事情......如果你以正确的方式进行重构。
为了记录,你第一次尝试失败的原因是
6
相当于
private static Integer[] train1, train2, train3, train4,
train5, train6 = new Integer[INITIAL];
如果您查看Java语法规则,这一点很清楚:例如http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.3.2