我试图调整我在网上找到的一个类,用于动态数组的“实体”的动态数组,但现在我得到一个“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;
}
提前感谢您的帮助!
答案 0 :(得分:3)
...
private Entity[] data= new Entity[0]; // Or some value > 0
...
否则在您第一次在方法中访问数据时,数据为空。
答案 1 :(得分:2)
position >= data.length
在初始化data
答案 2 :(得分:0)
(实体是一个字段吗?在这种情况下,您应该将其称为实体。请参阅http://java.sun.com/docs/codeconv/)
你应该准确地说出NPE被扔到哪一行。如果它在initialize()方法的第二行中,那么实体字段可能为空。如果它在put()方法中,则可能是因为数据字段为空。
答案 3 :(得分:0)
你这样做是为了学习吗?如果没有,为什么不使用java.util.Vector
,它为任何Object
提供动态数组?