0

私がやろうとしていることと私が抱えている問題は次のとおりです。動的配列への道を「偽造」したいのです。つまり、通常の配列構造を使用して、それがいっぱいになるたびに、古い配列よりも約 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 の null の場所をチェックしたところ、あることがわかりました。プログラムは、新しく成長した部分全体を「失っている」ようです。

/ * /

解決しました!成長に伴う新要素の追加が課題でした。今は大丈夫です。ご協力いただきありがとうございます。今後の参照用に詳細情報を投稿します。

4

2 に答える 2

2

ソースを使用してください:-)java.util.ArrayListそれを行います。たとえば、grow()メソッドを参照してください

于 2012-10-10T12:50:23.390 に答える
2

NPE は getId 呼び出しが原因のようです。

しかし、なぜ新しいノードを作成するのでしょうか? ただ:

aNew[i] = nodes[i];

新しい配列には、それらのクローンではなく、古い配列と同じオブジェクトが含まれている必要があります。

さらに、すべてが機能したら、最適化としてSystem.arrayCopy、ループの必要性を取り除くことを検討してください。

于 2012-10-10T12:46:27.250 に答える