2

物がインベントリにプッシュされる ArrayDeque を使用して、基本的なインベントリ システムを作成しています。

Couch couch1 = new Couch("I wouldn't sit on it.", 100, true);
roomList[0].inventory.add(couch1);

このような部屋にアイテムがないかチェックしています。

if (input.matches(".*look.*"))
{
    if(input.matches(".*Couch.*"))
    {
        if(roomList[currentRoom].inventory.contains(???))
        {
            //code to be executed.
        }
    }
}

??? には何を入れますか?インベントリArrayDequeにオブジェクトcouch1が含まれているかどうかを確認するには? これが不可能な場合、これを行うためのより良い方法はありますか?

4

1 に答える 1

0

このcontains()関数は、の実装に基づいていますequals()。デフォルトでは、まったく同じオブジェクトを提供する必要があります(so couch1)。オーバーライドすると、たとえばすべてのフィールドを比較することで、独自のバージョンのequalsを作成できます。このための非常に便利なツールはApacheEqualsBuilderであり、これは関数の実装方法も説明していequals()ます。

欠点は、同じフィールドでソファオブジェクトを作成する必要があることです。それが不可能な場合は、マップなどの別のデータ型に頼ることができる場合があります。その後、ソファのいくつかのフィールドに基づいて一意のIDで保存できます。

最後の代替方法は、関数を使用せず、代わりに、他のいくつかの選択基準に基づいてとcontains()をループする独自の関数を作成することです。Deque

于 2012-12-18T08:59:36.340 に答える