2016-02-21 54 views
-1

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

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不能解析为类型。

当我尝试设置新的Integer(INITIAL)时,我可能会搞砸一些东西,因为我以前从来没有用过这种方式,但是我还没有找到任何东西来帮助我找出问题所在。

+1

停止不做任何事情,但静态变量。在你的主体中,创建列车实例(列车列车=新列车()),并在列车实例上调用方法。把所有东西打成主要或静态是一种可怕的坏模式。 – pczeus

+0

您还需要提供确切的错误以及它发生的行。 – pczeus

回答

0

你只是初始化Integer[] train6 = new Integer[INITIAL];

其他国家仍然设置为null。在设置train2 [0]的值之前,检查train2是否为空。

if(train2 == null) 
    train2 = new Integer[INITIAL]; 

train2[0] = 4; 

这是否说清楚了?

P.S.将来,要更具体地说明你的问题到底在哪里。

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 

是的,它是冗长,但这是你得到什么,如果你的代码是“defactored”用那样的多个数组变量。

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


为了记录在案,那为什么你的第一次尝试失败的原因是

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