【发布时间】:2012-10-10 12:41:26
【问题描述】:
这是我正在尝试做的事情以及我遇到的问题:我想“伪造”通往动态数组的方式。这意味着,使用普通的数组结构,只要它满了,我就会创建一个比旧数组大 25% 的新数组,然后将旧数组的元素复制到新数组中。
// Whenever my original nodes array is full
Node aNew[];
aNew = new Node[newDesiredSize];
//I create every new element in the new array for this to be a deep copy
for (int i=0; i<numVert; i++){
aNew[i] = new Node(nodes[i].getId());
}
nodes = aNew;
但这似乎不起作用,因为当我尝试填充和访问我新创建的数组时,我收到 NullPointerException 错误。
我一直在与这种伪造动态数组的方法作斗争,但我显然遗漏了一些东西。
不允许使用ArrayList 或任何其他形式的真正动态结构。
/***/
编辑:根据建议,我改变了
aNew[i] = new Node(nodes[i].getId());
到
aNew[i] = nodes[i];
但这似乎并不能解决问题。
我还检查了所有 i 的空位,结果证明我有。该程序似乎正在“失去”整个新增长的部分。
/*/
解决了!这是在增长时添加新元素的问题。现在一切都好。谢谢你的帮助。将发布更多信息以供将来参考。
【问题讨论】:
-
检查nodes[i]对于某些i是否为空
-
ArrayList 实际上是用相同的思想实现的(但扩展因子不同)。
-
@gefei:是的,我有 null i 在我不知道的范围内。我认为这与深复制或浅复制有关,但我不确定。
-
哪一行抛出异常?
-
@JakubZaverka 任何尝试在增长时访问任何新位置的方法都会引发 NPE。
标签: java arrays resize nullpointerexception