我试图修改"添加"方法使得它检查BinItem的SKU是否相同。如果它是唯一的,我会添加它。如果它与其他SKU具有相似的SKU,它将删除BinItem,创建一个新的(相同的SKU),但总结数量。
我尽我所能但却无法理解......这是我的努力。我试着制作一个嵌套的for循环,所以它遍历每个循环,检查它们是否相同并删除它们是否相同。它最终删除了所有内容。
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;
}
// Define the remove and totalQuantity methods and redefine the add method here
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)
{
for (int i = 0; i < myContents.size(); i++)
{
for (int x = 0; x < myContents.size(); x++)
{
if (!(myContents.get(i).getSKU().equals(myContents.get(x).getSKU())))
myContents.add(b);
else
myContents.remove(b);
}
}
}
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
答案 0 :(得分:1)
如果要做的只是检查列表是否包含具有特定sku的BinItem,则可以覆盖BinItem类中的equals方法。
public override boolean equals(Object obj){
if(!(obj instanceof Bin)) return false;
Bin b = (Bin) obj;
return b.getSKU().equals( getSKU());
}
您需要检查obj是否为Bin对象,否则如果传递的obj不是Bin类型,则会收到错误。
然后在Bin类的add方法中,使用myContents.contains( newObject)
来检查列表是否包含该对象
如果列表已包含bin项,则它将返回true。此时,您可以获取列表中已有项目的数量,然后将新对象的数量添加到其中。如果您要更改的是数量,则无需删除该项目并创建新项目
只需添加一个addQuantity
方法并传入一个int;像这样:
public void addQuantity(int num){
myQuantity += num;
}
要获取列表中的alrady对象,可以使用indexOf(obj)
获取它的索引,然后使用get检索对象,然后只需按给定的数量递增数量。
实际上你甚至不需要使用.contains(),因为如果列表中不存在该对象,它将返回-1,你可以这样检查:
int index = myContents.indexOf( b );
if(index == -1){
//Handle adding the item to the list.
}else {
BinItem bi = myContents.get(index);
bi.addQuantity( b.getQuantity() );
}
希望这能帮到你。
答案 1 :(得分:0)
在BinItem类中,您可以覆盖equals()方法
public boolean equals(Object obj) {
BinItem b = (BinItem) obj ;
return b.getSKU() == obj.getSKU();
}
然后使用public boolean contains(Object o)
public void add (BinItem b)
{
if (!myContents.contains(b))
myContents.add(b);
else { //Edit : Based on Anthony Forloney's comment
// You should handle the quantity sum here based on your logic
myContents.remove(b);
myContents.add(b);
}
}