我正在创建一个带有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?如果无法做到这一点,有没有更好的方法呢?
答案 0 :(得分:0)
contains()
功能基于equals()
的实施。默认情况下,您必须提供完全相同的对象(所以couch1
)。如果覆盖,您可以创建自己的equals版本,例如通过比较所有字段。一个非常有用的工具是Apache EqualsBuilder,这也解释了如何实现equals()
函数。
缺点是你必须构建一个具有相同字段的沙发对象。如果不可能,您可以使用其他数据类型,例如地图。然后,您可以根据沙发的某些字段以唯一ID进行存储。
最后一种选择是不使用contains()
函数,而是根据一些其他选择标准创建自己的循环Deque
的函数并过滤。