0

オブジェクトのクラスがあります。理想的には、それらすべてを 5 つの別々のセットに配置したいと考えています。次に、これら 5 つのセットすべてを HashMap に追加し、それぞれに一意の識別子を付けたいと思います。

最後に、HashMap でセットではなく、セットに含まれるオブジェクトを検索できるようにしたいと考えています。これは可能ですか?HashMaps について見つけられる限り多くの情報を調べましたが、これを行う方法が見つからないようです。私ができない場合、誰かが良い代替手段を持っていますか?

編集 - サンプルコード:

public class Cell{
    private int x;
    private int y;

    public Example(int x, int y) {
        this.x= x;
        this.y= y;
    }
}

次に、MouseListener を使用して、ユーザーがグリッド上のどこをクリックしたかを検出します。次の船が配置されるまでの時間を返すメソッド呼び出しを行うことで、彼らが配置した (戦艦ゲームをモデリングしている) 船の数を判断します。次に、これを行います。

for (int i = 0; i < currentShipLength; i++)
    playerGridLogic.addCellsWithShips(new Cell(x, y+ i));
numberOfPlayerShipsPlaced++;

最後に、すべての船が配置されたら、それらを HashMap に追加したいと思います。現在、すべての船を大型セットに追加しています。コンピューターがグリッド内のセルをクリックすると、次が実行されます。

if (playerGridLogic.getCellsWithShips().contains(attackedCell)) {
    playerGrid.getCellArray()[xPos][yPos].setBackground(Color.ORANGE);
}
else {
    playerGrid.getCellArray()[xPos][yPos].setBackground(Color.MAGENTA);
}

これはすべて完全に機能しますが、船が攻撃されたことを通知するだけです. その船が破壊されたときにユーザーに情報を出力できるように、どちらを知りたいかはわかりません。

最も簡単な方法は、1 つだけではなく 5 つのセットを作成し、上記で説明したようにそれらを HashMap に追加することだと思いました。ただし、これが可能かどうかはわかりません。私の実験はこれまでうまくいきませんでした。

4

3 に答える 3

0

そのオブジェクトをセットから取り出して何かをする必要がありますか、それとも単にそこにあることを確認する必要がありますか? そこにあるかどうかを確認するだけでよい場合は、次のようにします。

boolean isInMap = false;
for(Set<MyObject> s: map.values()){
    if(s.contains(objectToSearchFor)){
        isInMap=true;
        break;
    }
}

実際にオブジェクトを操作する必要がある場合は、if ステートメント内でセットを調べて、それぞれが探しているものと一致するかどうかを確認できます。

于 2013-05-02T08:58:06.357 に答える