2012-03-28 5 views
0

JavaのHashMapに5つのエントリが含まれています。各エントリにマッピング含むオブジェクトである:セットに競合があるかどうかを確認する

  • x値
  • y値
  • 方向(いずれかの "水平" または "垂直")

考えゲームの戦艦の10 x 10のボード。各エントリのx/y座標は、ボード上の船の左上隅に対応し、長さおよび向きは、予想されるように、その点からの船の長さおよび方向に対応する。

私は5隻の船を掘り起こし、コンフリクトとして知られている「オーバーラッピング船」があるかどうかを確認しようとしています。がボードにあります。私はこれを行う方法を理解することはできません。どんな助けでも大歓迎です。それを行うには

+0

どのようにハッシュマップに配置していますか? –

+1

類似のものがここで議論されましたhttp://stackoverflow.com/questions/7501344/how-to-validate-battleship-field。見てください – user219882

+0

注:エントリはカップル(キー、値)です。 – Vincent

答えて

1

一つの方法は次のとおりです。

1)自分のボードに番号、1-100(または0-99)を各セルに割り当てます。

2)ハッシュマップ内のものに、対象となる一意のセルIDのリストを返すメソッドを追加します。したがって、x == 1、y == 1、length == 3、orientation == horizo​​ntalの場合、潜水艦が存在するセルを表す3つの1-100の値を返します。

のように、最初の一意のIDを計算することができます。rowNumber*10 + columnNumberのようになります。あなたは0または1ベースであるかどうかに応じてそれを微調整しなければならないかもしれません。もしあなたの範囲が同様に0または1ベースのものならば、そこから水平の場合は長さの単位ごとに1を加えてください。また、作品が垂直の場合は、それぞれの固有IDに10を追加します。

3)これで、静的メソッドを持つ衝突検出器クラスを作成できます。このクラスは2つです。手順2で作成したメソッドを呼び出して2つのリストを取得し、重複がある場合は両方のリストで同じ番号を見つけることができます。

これが最良の方法であるかどうかわかりませんが、それは一方的な方法です。

関連する問題