数组中的Java-NullPointerException

数组中的Java-NullPointerException,java,arrays,nullpointerexception,Java,Arrays,Nullpointerexception,我遇到了以下问题:我有一个java类,其私有成员如下: private Arcs[] arcs; 这不是在构造函数中初始化的,因为我还不知道向量的长度,但它是在read函数中初始化的,我从文件中读取信息。 在此函数中,我执行以下操作: arcs = new Arcs[n]; //n is a number read from file 然后是一个周期,在这个周期中,我从文件中读取了其他内容,我有一些类似于: while(condition){ ... arcs[i].add(blah); /

我遇到了以下问题:我有一个java类,其私有成员如下:

private Arcs[] arcs;
这不是在构造函数中初始化的,因为我还不知道向量的长度,但它是在read函数中初始化的,我从文件中读取信息。 在此函数中,我执行以下操作:

arcs = new Arcs[n]; //n is a number read from file
然后是一个周期,在这个周期中,我从文件中读取了其他内容,我有一些类似于:

while(condition){
...
arcs[i].add(blah); //i is a valid number, smaller than n, and the add function is also correct
...
}

但在这里我有一个错误,说NullPointerException,我不明白为什么。如果有人能向我解释发生了什么,我将不胜感激

您是否确实在Arcs[i]中存储过Arcs对象?否则,Arc[]的所有元素都将初始化为null。因此,NPE

这样做:

while(condition){
    // ...
    arcs[i] = new Arcs();
    arcs[i].add(blah); 
    // ...
}
参考:

Java教程:
您是否确实在Arcs[i]中存储过Arcs对象?否则,Arc[]的所有元素都将初始化为null。因此,NPE

这样做:

while(condition){
    // ...
    arcs[i] = new Arcs();
    arcs[i].add(blah); 
    // ...
}
参考:

Java教程:
我不能这样做,因为我可能会在多个循环中引用相同的弧[I],这意味着反复初始化它,最终我不会在其中包含我需要的所有信息。在while之前,我也尝试过这样做,但仍然不太好。@Sireny,您可以做ifarcs[i]==null{arcs[i]=new arcs;}。也许有一个更干净的方法来处理这个问题。好吧,我又试了一次,现在它起作用了。。。我使用for循环初始化所有元素,现在一切正常。我只是不明白为什么它一开始就不起作用。无论如何,感谢大家的帮助:ARCS =新的ARCs(N]初始化一个用于ARC++对象的容器,但是它并没有通过设计来创建对象本身。在这种情况下,您需要知道没有直接包含其他对象的对象,在Java中,它们只能指向其他对象。数组也是如此:随便说你声明了一个弧数组,但严格来说你声明了一个指向弧的指针数组,这是完全不同的。我不能这样做,因为我可能引用相同的弧[I]在不止一个循环中,这意味着反复初始化它,最终我不会在其中包含我需要的所有信息。在while之前,我也尝试过这样做,但仍然不太好。@Sireny,您可以做ifarcs[i]==null{arcs[i]=new arcs;}。也许有一个更干净的方法来处理这个问题。好吧,我又试了一次,现在它起作用了。。。我使用for循环初始化所有元素,现在一切正常。我只是不明白为什么它一开始就不起作用。无论如何,感谢大家的帮助:ARCS =新的ARCs(N]初始化一个用于ARC++对象的容器,但是它并没有通过设计来创建对象本身。在这种情况下,您需要知道没有直接包含其他对象的对象,在Java中,它们只能指向其他对象。数组也是如此:随便地说,您声明了一个圆弧数组,但严格地说,您声明了一个指向圆弧的指针数组,这是完全不同的。