无法识别全局数组



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

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
是的,

它很冗长,但是如果您的代码被"分解"以使用多个这样的数组变量,这就是您得到的。

我认为您应该考虑使用第一个维度为 6Integer[][]。 这也可能会简化其他事情......如果你以正确的方式进行重构。


郑重声明,您的第一次尝试失败的原因是

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

相关内容

  • 没有找到相关文章

最新更新