如何修改"添加" ArrayList的方法?

时间:2014-12-29 05:32:05

标签: java arraylist

我一直在研究这个添加方法代码几个小时,无法理解它...任何提示/帮助就足够了。

我有一个Bin类,它创建了BinItems的ArrayList。 BinItem类接受String SKU及其int数量。 “添加”方法应该在类Bin中做什么,看看Bin中是否已经有一个具有相同SKU的BinItem,如果有,那么它将添加数量。

以下是给我的说明“add方法的修改版本。我们现在需要这个方法如下操作:当被要求添加bin项目b时,它首先检查bin是否已经包含bin具有与b相同的SKU的项目。如果是,则移除已经在箱子中的箱子项目a并且添加新的箱子项目,其数量是a和b的数量的总和。如果没有这样的bin项已经在bin中,然后bin项b以通常的方式添加。“

我无法修改其他类,我只能修改类Bin中的3个方法:remove,totalQuantity和add。我的主要问题是我不确定如何在方法添加中创建一个新的BinItem,这会增加数量并删除所有类似的SKU。

这是我的Bin Code

public class Bin {
    private String myName;
    private ArrayList<BinItem> myContents;

    public Bin ( String name )
    {
        myName = name;
        myContents = new ArrayList <BinItem>();
    }    

    public ArrayList <BinItem> getContents()
    {
        return myContents;
    }    

    public String getName()
    {
        return myName;
    }

    public void remove (int b)
    {
        myContents.remove(b);
    }

    public int totalQuantity()
    {
       int x = 0;
       for (int i = 0; i< myContents.size(); i++)
       {
           x += myContents.get(i).getQuantity();
       }
       return x;
    }

    public void add ( BinItem b)
    {
        BinItem a = b;
        myContents.add(a);
        for (int x = 0; x < myContents.size(); x++)
        {
            if (a.getSKU().equals(b.getSKU()))
                myContents.remove(a);

        }
    }

    public String toString()
    {
        String s = "Bin " + myName + ":\n";
        for ( BinItem b : myContents ) 
        s += b + "\n"; 
        return s;    

    }
}

BinItem代码

public class BinItem {

    private String mySKU;
    private int myQuantity;

    public BinItem ( String sku, int quantity)
    {
        mySKU = sku;
        myQuantity = quantity;
    }

    public String getSKU()
    {
        return mySKU;
    } 

    public int getQuantity()
    {
        return myQuantity;
    }

    public String toString()
    {
        return "SKU " + getSKU() + ": " + getQuantity();
    }
}

主要代码

public static void main( String[] args )
{
  Bin bin = new Bin( "A" );
  bin.add( new BinItem( "1234-0", 500 ) );
  bin.add( new BinItem( "1234-1", 25 ) );
  bin.add( new BinItem( "1234-0", 243 ) );
  bin.add( new BinItem( "1234-2", 7720 ) );
  bin.add( new BinItem( "1234-0", 871 ) );
  System.out.println( bin );
}

和预期结果

Bin A:
SKU 1234-1: 25
SKU 1234-2: 7720
SKU 1234-0: 1614
[The bin items may be listed in a different order.]

2 个答案:

答案 0 :(得分:0)

public void add ( BinItem b)
{
    boolean added = false;
    for (int x = myContents.size() - 1; x >= 0; x--)
    {
        BinItem temp = myContents.get(x);
        String sku = temp.getSKU();
        if (sku.equals(b.getSKU())){
            myContents.remove(x);
            int quantityToAdd = temp.getQuantity();
            int bQuantity = b.getQuantity();
            BinItem newItem = new BinItem(sku, quantityToAdd + bQuantity);
            myContents.add(0, newItem);
            added = true;
        }
    }
    if (!added){
        myContents.add(b);
    }
}

这从列表的末尾开始,并执行请求的检查并在必要时删除。然后它创建具有组合数量的新BinItem,并将新项目添加到列表的开头,以便再次搜索它。

答案 1 :(得分:0)

我自己没有编译过这个程序,但是从我在你的add方法中看到的,你做了一些错误的事情。

  1. 您正在为列表创建一个新变量a,该变量已经等于b.如果您循环浏览列表以比较a = b,那么if-statement将始终返回{ {1}}当你到达true元素时。{/ li>
  2. 您没有循环使用a。如果您检查了if条件,那么您正在检查ArrayList variablesa是否相等,而不是b myContents本身。
  3. 我还没有编译此代码,但根据上述规范,ArrayList的修改版本可能如下所示:

    add(BinItem)

    编辑:更改了代码以使用迭代器,但仍未经过测试