1

我试图将我在网上找到的一个类改编为一个动态整数数组,用于一个动态的“实体”数组,但现在我得到了一个“NullPointerException”。

引发异常的代码是:

public void initialize()
{
    buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB);
    Entities.put(Entities.getCurrentPos()+1, new Entity(100, 100, Color.green));
    Entities.put(Entities.getCurrentPos()+1, new Entity(400, 400, Color.blue));
}

DynArrayEntities 类的相关部分:

...

private Entity[] data;  // An array to hold the data.
private int currentpos = 0;

...

public void put(int position, Entity value) {

    if (position >= data.length) {

        int newSize = 2 * data.length;
            if (position >= newSize)
                newSize = 2 * position;
        Entity[] newData = new Entity[newSize];
        System.arraycopy(data, 0, newData, 0, data.length);
        data = newData;
    }

    data[position] = value;
    currentpos++;

}

....

public int getCurrentPos() {
    return currentpos;
}

在此先感谢您的帮助!

4

4 回答 4

3
...

private Entity[] data= new Entity[0];  // Or some value > 0
...

否则数据在您第一次在方法中访问时为空。

于 2010-02-15T23:53:59.800 回答
2

你正在做的

position >= data.length

在初始化之前data

于 2010-02-15T23:57:09.497 回答
0

(实体是一个字段吗?在这种情况下,您应该将其称为实体。请参阅http://java.sun.com/docs/codeconv/

您应该准确地告诉 NPE 在哪一行被抛出。如果它在 initialize() 方法的第二行,那么 Entities 字段可能为空。如果它在 put() 方法中,那么可能是因为数据字段为空。

于 2010-02-15T23:58:09.097 回答
0

Are you doing this just as a learning exercise? If not, why not use java.util.Vector, which provides a dynamic array for any Object?

于 2010-02-16T00:13:15.070 回答