Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在arraylist中访问和对象(java)_Java_Arraylist - Fatal编程技术网

在arraylist中访问和对象(java)

在arraylist中访问和对象(java),java,arraylist,Java,Arraylist,我正在做一个类似超市自助结账柜台的订单程序。创建订单时,每个行项目都是一个对象,并保存在arraylist中。 LineItem类有两个变量-ItemID和ItemQuantity。incQuantity方法用于将数量增加1。 创建arraylist并向其中添加lineItems没有问题,但无法调用incQuantity方法,以便在遇到具有相同ItemID的其他项时使用。 我正在使用get、remove和add序列来更新对象。 在我看来,必须有一种方法可以直接访问对象并调用incQuantity

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

 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);

}
公共静态类行项{
私有字符串ItemID;
私人物品数量;
公共行项目(字符串ID){
ItemID=ID;
ItemQuantity=1;//在项目第一次出现时,Quantity初始化为1
}
公共数量(){
ItemQuantity++;
} 
}
私有静态void TestItems(){
ArrayList orderSheet=新建ArrayList();
LineItem newLine=新的LineItem(“12345”);
orderSheet.add(换行符);
换行符=新行项目(“121233445”);
orderSheet.add(换行符);
换行=新行项目(“129767345”);
orderSheet.add(换行符);
换行符=新行项目(“5454120345”);
orderSheet.add(换行符);
换行=新行项目(“0987123125”);
orderSheet.add(换行符);
换行=新行项目(“65561276345”);
orderSheet.add(换行符);
//以下元素0的增量数量
LineItem updateLine=orderSheet.get(0);
updateLine.incQuantity();
订单。删除(0);
orderSheet.add(updateLine);
}

您不必删除或重新添加项目,只需获取项目并调用其方法即可:


orderSheet.get(0).incQuantity()应该可以解决这个问题。

我的建议是使用一个简单的Hashmap来解决这个问题。该映射将只包含作为键的项目id和作为值的项目类。 item类还将有一个增量计数器方法。
通过这种方式,您可以检查项目id是否在地图上,如果在地图上,则调用该方法以增加计数。

请参见此。我举了一个增加订单中所有项目数量的例子。但是我认为您需要在调用incQuantity()时检查项目id

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