不识别全局数组

时间:2016-02-21 01:13:58

标签: java arrays eclipse nullpointerexception global-variables

好吧,我可能做了一些愚蠢的事,但我无法弄清楚是什么。我需要创建一个具有初始容量的全局数组,但只要我尝试,它就会抛出一些错误。现在我有:

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)时可能会弄乱一些东西,因为我之前从未使用过它,但我还没有找到任何可以帮助我找出问题的东西。

2 个答案:

答案 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