在我的游戏中,用户将能够组合项目,如果兼容,则会产生项目新项目。物料ID保存为int。
我想知道最有效的方法是什么,同时确保交换的订单总是会产生相同的结果,因此用户可以输入订单:
item X + item Y = item Z
item Y + item X = item Z
我最初想过做一些像开关一样简单的事情:
private int findItem(id1, id2)
{
int newID = 0;
switch(id1)
{
case 1:
if(id2.equals(4))
newID = 9;//Item 1 + Item 4 = Item 9
break;
}
return newID
}
但是,我不确定使用开关是最有效(或整洁)的,并且我必须在函数以相反的顺序接收项目ID的情况下创建另一个案例。我还必须在一个案例中评估所有事情" id1"可以结合。
有一种简单的方法可以做到这一点,在保持高效率的同时不会超过1,000行?
答案 0 :(得分:3)
我建议使用Map<Set<Item>, Item>
来存储食谱。它的关键是一组所需的项目(可能超过两个),以及它对制作项目的价值。
然后,您可以使用其.containsKey(Set<Item>)
方法检查配方是否存在,并使用其.get(Set<Item>)
方法获得精心设计的结果。
请注意,您的商品必须覆盖Object.hashCode()
才能使此解决方案正常运行。
以下是一个小代码段,以防它不太清楚:http://ideone.com/MbnsrC