我正在制作游戏,其中一种类型的NPC是工匠,他们从您的库存中取出物品并将其替换为其他物品。 item类包含一个类型和数量,artisan有两个arraylists:inside,包含所有项目及其数量,以及外部具有相同的东西。 这是执行交换的交易方法。
public void trade(final ArrayList<thing> input)
{
//commands=new ArrayList<Command>();
boolean able=true;
String s = "traded ";
if(inside!=null)
{
for(thing w: inside)
{
able&=viable(input, w);
s+=w+", ";
if(able==false)
{
game.addmessage("you don't have enough "+w.text+"(s)");
break;
}
}
}
else able=true;
System.out.println(say);
if(able==true)
{
System.out.println(say+" in:"+inside+" out: "+outside);
s+=" for ";
if(inside!=null)
{
for(thing q:inside)
{
remove(input, q);
}
}
if(outside!=null)
{
for(thing r:outside)
{
game.additem(r);
s+=r+", ";
}
}
game.addmessage(s);
//Interpret command, if any
//interpret();
}
else
{
}
}
public boolean viable(ArrayList<thing> input, thing t)
{
for(int i=0; i< input.size(); i++)
{
if(input.get(i).type==t.type & input.get(i).quantity() >= t.quantity()) return true;
}
return false;
}
public void remove(ArrayList<thing> input, thing t)
{
int i=0;
while(input.get(i).type!=t.type)i++;
input.get(i).lower(t.quantity());
if(input.get(i).quantity()<=0)input.remove(i);
}
当我点击让交易进行多次交易时,会发生一种奇怪且非常令人沮丧的事情,所有交易都是有效交易,而且我确实有足够的每个项目来完成交易。这是应该说明的输出:
免费红色gemn
免费红色gemn in:null out:[red gem(1)]
免费红色gemn
免费红色gemn in:null out:[red gem(1)]
免费红色gemn
免费红色gemn in:null out:[red gem(2)]
免费红色gemn
免费红色gemn in:null out:[red gem(4)]
免费红色gemn
免费红色gemn in:null out:[red gem(8)]
免费红色gemn
免费红色gemn in:null out:[red gem(16)]
免费红色gemn
免费红色gemn in:null out:[red gem(32)]
为什么会发生这种情况,即使项目类中的数量字段是私有的?为什么数量在变化?