2014-11-22 89 views
0

我正在开发类似于超市自助结账柜台的订单程序。在创建订单时,每个订单项都是一个对象,并保存在一个数组列表中。
LineItem类有两个变量 - ItemID和ItemQuantity。一种方法,incQuantity用于将数量增加1. 创建arraylist并向其添加lineItems没有问题,但在遇到具有相同ItemID的其他项目时无法调用incQuantity方法。 我正在使用get,remove和add序列来更新对象。 在我看来,必须有一种方法直接访问该对象,并调用incQuantity方法,而无需将其从数组列表中移除并重新添加。 请参阅下面的测试代码。访问和阵列列表中的对象(java)

public static class LineItem{ 
    private String ItemID ; 
    private int ItemQuantity; 

    public LineItem(String ID) { 
     ItemID = ID; 
     ItemQuantity = 1; //upon first occurrence of an item, qty is initialized to 1 
} 
    public void incQuantity() { 

    ItemQuantity++; 
} 
} 



private static void TestItems() { 
     ArrayList <LineItem> orderSheet = new ArrayList<LineItem>(); 
     LineItem newLine = new LineItem("12345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("121233445"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("129767345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("5454120345"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("0987123125"); 
     orderSheet.add(newLine); 
     newLine = new LineItem("65561276345"); 
     orderSheet.add(newLine); 
     // Increment Quantity of Element 0 below 
     LineItem updateLine = orderSheet.get(0); 
     updateLine.incQuantity(); 
     orderSheet.remove(0); 
     orderSheet.add(updateLine); 

} 

回答

1

您不必删除重新添加它,只是获取该项目,并调用它的方法:

orderSheet.get(0).incQuantity()应该做的伎俩。

0

我的建议是使用一个简单的Hashmap来解决这个问题。该地图将简单地将项目ID作为关键字并将项目类别作为值。 项目类别也将有一个增量计数器方法。 这样你检查物品ID是否在地图上,如果是这样,调用方法来增加计数。

0

请看这里。我给出了一个增加orderSheet中所有项目数量的例子。但我认为你需要在调用incQuantity()期间检查项目ID。

Iterator<LineItem> it = orderSheet.iterator(); 
while(it.hasNext()) {   
    it.next().incQuantity(); 
}