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 版本,例如通过比较所有字段。一个非常有用的工具是 Apache EqualsBuilder,这也解释了如何实现该equals()功能。

那么缺点是您必须构造一个具有相同字段的沙发对象。如果这是不可能的,您也许可以求助于另一种数据类型,例如地图。然后,您可以根据沙发的某些字段通过唯一 id 进行存储。

最后一种选择是不使用该函数,而是根据其他一些选择标准contains()创建自己的函数来循环和过滤器。Deque

于 2012-12-18T08:59:36.340 回答