【问题标题】:Not recognizing global arrays无法识别全局数组
【发布时间】:2016-06-02 13:11:45
【问题描述】:

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

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) 时可能搞砸了,因为我以前从未使用过它,但我还没有找到任何东西来帮助我找出问题所在。

【问题讨论】:

  • 除了静态变量什么都不做。在您的主目录中,创建一个火车实例 (Trains trains = new Trains()) 并在火车实例上调用方法。将所有内容都堆放在 main 或 static 中是一种非常糟糕的模式。
  • 您还需要提供确切的错误及其发生的行。

标签: java arrays eclipse nullpointerexception global-variables


【解决方案1】:

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

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

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

train2[0] = 4;

这样说清楚了吗?

附:将来,请更具体地说明您的问题到底出在哪里。

【讨论】:

    【解决方案2】:

    替换

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      • 2021-03-05
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多