不可变的arraylists和操纵对象

时间:2014-09-20 14:02:11

标签: java immutability

我正在制作游戏,其中一种类型的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)]

为什么会发生这种情况,即使项目类中的数量字段是私有的?为什么数量在变化?

0 个答案:

没有答案