2015-12-21 62 views
-2

我試圖實現使用兩個java類的購物車過程。一個是CartItem,另一個是ShoppingCart,它包含購物車的所有過程。購物車沒有更新數量從第二次嘗試

這裏是我的CartItem

public class CartItem implements Serializable { 

    private int pro_id; 
    private int qnty; 


    public CartItem(int pro_id, int qnty) { 
     this.pro_id = pro_id; 
     this.qnty = qnty; 

    } 
    // getters and setters 
    .... 
     // checking the item is already in the cart or not 
     public boolean isSameProduct(CartItem item) { 
     return this.pro_id == item.getPro_id(); 

    } 

ShoppingCart類:

public class ShoppingCart { 

    private CopyOnWriteArrayList<CartItem> itemList; 


    public ShoppingCart() { 
     this.itemList = new CopyOnWriteArrayList<CartItem>(); 

    } 
    // adding item something wrong here I think.. 
    public boolean addItem(CartItem item) { 
     boolean flag = false; 
     if (!this.itemList.isEmpty()) { 
      for (CartItem itm : this.itemList) { 
       if (itm.isSameProduct(item)) { 
        itm.setQnty(item.getQnty() + itm.getQnty()); 
        flag = true; 
        break; 

       } else { 
        this.itemList.add(item); 
        flag = true; 
        break; 
       } 

      } 
     } else { 
      this.itemList.add(item); 
      flag = true; 
     } 
     return flag; 

    } 

    public void removeItem(int item_id) { 
     for (CartItem item : this.itemList) { 
      if (item.getPro_id() == item_id) { 
       this.itemList.remove(item); 
      } 
     } 
    } 

這是我加入產品的方式和出放:

ShoppingCart sc = new ShoppingCart(); 
sc.addItem(new CartItem(1, 1)); 
sc.addItem(new CartItem(1, 2)); 
sc.addItem(new CartItem(1, 3)); 
sc.addItem(new CartItem(1, 1)); 
sc.addItem(new CartItem(2, 1)); 
sc.addItem(new CartItem(2, 2)); 
sc.addItem(new CartItem(3, 4)); 
sc.addItem(new CartItem(3, 1)); 
// sc.removeItem(3); 

for (CartItem item : sc.itemList) { 
    System.out.println("Item id - " + item.getPro_id() + " : Item Qnty - " + item.getQnty()); 
} 

出輸入:

Item id - 1 : Item Qnty - 7 
Item id - 2 : Item Qnty - 1 
Item id - 2 : Item Qnty - 2 
Item id - 3 : Item Qnty - 4 
Item id - 3 : Item Qnty - 1 

但預計:

Item id - 1 : Item Qnty - 7 
Item id - 2 : Item Qnty - 3 
Item id - 3 : Item Qnty - 5 

在此先感謝。

+0

您是否嘗試過調試代碼?可以通過在調試模式下逐行執行,也可以使用print語句來跟蹤程序在每個步驟的行爲。 – Ciara

回答

1

一旦你購物車中有一個項目,你從來沒有真正購物車中的第一個項目之後檢查什麼,因爲你總是同時通過列表元素循環打破:

 for (CartItem itm : this.itemList) { 
      if (itm.isSameProduct(item)) { 
       itm.setQnty(item.getQnty() + itm.getQnty()); 
       flag = true; 
       break; // It was the same product; break. 

      } else { 
       this.itemList.add(item); 
       flag = true; 
       break; // It wasn't the same product; break. 
      } 
     } 

相反,你需要利用flag的價值,只有當flag是假的添加菜單項:

public boolean addItem(CartItem item) { 
    boolean flag = false; 
    for (CartItem itm : this.itemList) { 
     if (itm.isSameProduct(item)) { 
      itm.setQnty(item.getQnty() + itm.getQnty()); 
      flag = true; 
      break; 
     } 
    } 
    if (!flag) { 
     this.itemList.add(item); 
     flag = true; 
    } 
    return flag; 
} 
+0

非常感謝你。它的工作原理。 :) –

相關問題