我一直在研究这个添加方法代码几个小时,无法理解它...任何提示/帮助就足够了。
我有一个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.]
答案 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方法中看到的,你做了一些错误的事情。
a
,该变量已经等于b.
如果您循环浏览列表以比较a = b,
那么if-statement
将始终返回{ {1}}当你到达true
元素时。{/ li>
a
。如果您检查了if条件,那么您正在检查ArrayList
variables
和a
是否相等,而不是b
myContents
本身。我还没有编译此代码,但根据上述规范,ArrayList
的修改版本可能如下所示:
add(BinItem)
编辑:更改了代码以使用迭代器,但仍未经过测试