0

私は現在、Java プログラムで立ち往生しています。街づくりゲームである私のプログラムには、ユーザーの気まぐれに基づいていつでもオブジェクトをインスタンス化する機能が必要であり、オブジェクトの数は無限である必要があります。

プログラムには建物タイプのオブジェクトがあります。

(私は新しいオブジェクトをインスタンス化する方法を知っています。そのように...

Building building1 = new Building();

...)

ただし、この方法論は私のプログラムには受け入れられません。私のプログラムは、新しい建物オブジェクトをその場でインスタンス化できる必要があります。ユーザーが、新しい建物を世界に配置するボタンをクリックするオプションを持っていると想像してください。クリックして新しい建物を世界に 0 回配置することも、5,000 回クリックして世界に 5,000 個の建物を配置することもできます。

次のように、5,000 個のオブジェクトをインスタンス化する必要がないことは明らかです。

Building building1 = new Building();
Building building2 = new Building();
...
Building building5000 = new Building();

どのようにコーディングするかについて何か提案はありますか? 前もって感謝します!

4

1 に答える 1

3

あなたが求めているように見えることを行うために知っておくべきことが2つあります.

1 つ目は、(この場合は) 建物オブジェクトのコレクションです。次のような行でJavaで作成できます

ArrayList<Building> buildings = new ArrayList<Building>();

コードで次の 2 行を実行すると、建物が作成され、リストに追加されます。

Building building = new Building();
buildings.add(building);

その後、building変数がスコープ外になった後でも、建物はリストに残ります。buildings建物のリストを保持したい期間、範囲外に出ないオブジェクトによってオブジェクトが参照されていることを確認する必要があります。

2 番目に認識すべきことは、500 の建物を作成するために 500 の異なるインスタンス化ステートメントを用意する必要がないということです。ユーザーがボタンをクリックすると、実行できるコードがあります (使用している UI フレームワークなどによって異なります)。そのコードは、建物を作成してリストに入れることができます。同じコードを別のボタン クリックで実行できます。別の建物を作成してリストに追加します。作成する建物の数のオプションがある場合、クリック コードはそのオプションを調べて、想定されている数の建物をループで作成し、それらをリストに入れることができます。

これが必要なものをカバーしていない場合は、質問を明確にしてください。

編集: 配列内のオブジェクトに値を設定する

Building building = buildings.get(desiredIndex);
building.setDesiredValue("42");

代わりに次を使用できます。

buildings.get(desiredIndex).setDesiredValue("42");

しかし、それは読みにくいと思います。

参考までに、「無限」の数のオブジェクトは、無限のメモリを備えたマシンでのみサポートできます。私はそれを「実行時に決定される」という意味に取りました。

于 2014-10-10T16:16:19.147 に答える