これについては、おそらく多くの方法があります。そのほとんどは私には知られていません。ただし、最近、同様の問題を2つの異なる方法で解決しました。
二次元配列
「マップ」を 2 次元配列として実装することは明らかな解決策です。このシナリオでは、List
サイズを簡単に変更できるように実装する必要があります。ただし、特定の場所を検索するにはネストされたループなどが必要になり、インデックスがやや混乱する可能性があります。
地図
(私の意見では)この問題を解決するより良い方法は、Map
. Position
X と Y の位置を記録する 2 つの変数 (3 次元マップの場合は 3 つ) を持つクラスを作成する必要があります ( メソッドequals()
とhashCode()
メソッドも実装するようにしてください)。Position
その後、オブジェクトを実装のキーとして使用し、Map
のインスタンスに対して格納できますAnimal
。これにより、特定の場所の検索が高速になり ( HashMap と ArrayList のパフォーマンスが正しいことを参照)、コードが整理されます。つまり、マップ全体を反復処理するときにネストされたループがなくなります。次のようにマップ全体をループできます。
for(Map.Entry<Position, Animal> entry : animalMap.getEntries()){
//Do stuff
}
数年前、Fox/Rabbit シミュレーションを実装したチュートリアル プロジェクトを見ました。いくつかのアイデアについては、それを見たいと思うかもしれません: http://www.bluej.org/objects-first/
"Book Projects" .zip ファイルをダウンロードする必要があります。関連するプロジェクトは第 10 章にあります。