Java 如何修改";加上「;数组列表的方法?
我已经在这个添加方法代码上工作了好几个小时了,我的脑子都想不起来了。。。任何提示/帮助都足够了 我有一个类Bin,它生成BinItems的ArrayList。BinItem类接受字符串SKU及其整数数量。“add”方法在类Bin中应该做的是查看Bin中是否已经存在具有相同SKU的BinItem,如果存在,则会添加数量 这是给我的指示“添加方法的修改版本。我们现在需要按照如下方式操作此方法:当要求添加bin项目b时,它首先检查bin是否已包含与b具有相同SKU的bin项目。如果是,则移除已在箱子中的箱子项目a,并添加一个新的箱子项目,其数量为a和b数量之和。如果bin中没有此类bin项目,则按照常规方式添加bin项目b。” 我不能修改其他类,我只能修改类Bin中的3个方法:remove、totalQuantity和add。我的主要问题是我不确定如何在方法add中创建一个新的BinItem,该方法将数量相加并删除所有类似的SKU 这是我的银行代码Java 如何修改";加上「;数组列表的方法?,java,arraylist,Java,Arraylist,我已经在这个添加方法代码上工作了好几个小时了,我的脑子都想不起来了。。。任何提示/帮助都足够了 我有一个类Bin,它生成BinItems的ArrayList。BinItem类接受字符串SKU及其整数数量。“add”方法在类Bin中应该做的是查看Bin中是否已经存在具有相同SKU的BinItem,如果存在,则会添加数量 这是给我的指示“添加方法的修改版本。我们现在需要按照如下方式操作此方法:当要求添加bin项目b时,它首先检查bin是否已包含与b具有相同SKU的bin项目。如果是,则移除已在箱子中
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;
}
}
主代码
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.]
这从列表的末尾一直到开始,并在必要时执行请求的检查和删除。然后,它使用合并的数量创建新的BinItem,并将新项目添加到列表的开头,以便再次被搜索击中。我自己没有编译此程序,但根据您的添加方法,我看到了d、 你做错了几件事
b的列表创建一个新变量a
。
如果您在列表中循环以比较Ifa=b,
,那么当您到达a
元素时,If语句将始终返回true
ArrayList
上循环。如果检查If条件,则检查变量a
和b
是否相等,而不是myContents
ArrayList本身中的元素add(BinItem)
的修改版本可能如下所示:
public void add (BinItem b)
{
boolean changed = false;
Iterator itr = myContents.iterator();
while(itr.hasNext())
{
BinItem bItem = itr.next();
if (bItem.getSKU() == b.getSKU()) {
int oldQty = bItem.getQuantity();
itr.remove();
myContents.add(new BinItem(b.getSKU(), (b.getQuantity() + oldQty));
changed = true;
}
}
if(!changed) {
myContents.add(b);
}
}
编辑:将代码更改为使用迭代器,尽管重复,但仍然没有测试?是的,我尝试删除了其中的一个,但无法删除。我必须澄清,我只能修改类中的某些内容,如以下方法,而不能修改其他类。for循环中的代码看起来非常有用,但是,我尝试了它,它不会添加nything到BinItem编辑以添加不重复的项,我的错!我认为问题在于myContents.size()。bin没有任何内容,因此大小为0。顺便说一句,谢谢!我和holtc都添加了一个新条件,将新的BinItem添加到循环中(但我不知道他为什么有一个额外的参数)。这是可行的,但输出为-0,-1,-2,不像预期的输出那样在-1,-2,-0中,但数组列表包含所有正确的项。我使用for循环,只是因为我更喜欢for循环而不是迭代器。这将为列表中不相等的每个项添加b,而我们只想添加一次,因此else条件不应在e while loop。感谢您的帮助!我还没有学习“迭代器”方法或hasNext(),但它让我对如何创建并在方法中添加ArrayList有了更好的理解。没问题,最好选择一个推荐答案(我们的答案中的任何一个都可以完成所需的工作)。
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);
}
}
public void add (BinItem b)
{
boolean changed = false;
Iterator itr = myContents.iterator();
while(itr.hasNext())
{
BinItem bItem = itr.next();
if (bItem.getSKU() == b.getSKU()) {
int oldQty = bItem.getQuantity();
itr.remove();
myContents.add(new BinItem(b.getSKU(), (b.getQuantity() + oldQty));
changed = true;
}
}
if(!changed) {
myContents.add(b);
}
}