2 不同的项目添加到 ArrayList 但是最新的项目制作了两次?

2 Different items added to ArrayList however the latest item is made twice?

我有一个包含描述、产品编号和价格的产品的 TableView,当用户在 table 中选择产品并单击按钮时,它应该被添加到名为 order 的 ArrayList 中然后添加到名为 shoppingCart 的购物车中。请参阅下面的按钮方法:

        public void addToCartButtonClicked(){
        //Set the variables of the cart.
        //Set customer to the cart.
        shoppingCart.setShopper(newCustomer);
        //Set Cart ID
        shoppingCart.setCartId(cartID);

        //Get selected product from the table, add to order then add to cart.
        ObservableList<Product> allProducts;
        allProducts = shoppingTable.getItems();
        order.setProduct(shoppingTable.getSelectionModel().getSelectedItem());
        shoppingCart.addOrder(order);
        System.out.println(order);  
    }

我已经使用 System.out 尝试理解这个问题,但不幸的是它以前是有效的。当我添加产品 'Apple' 时,它会成功地将其添加到 shoppingCart 及其属性,然后当我添加 'Melon' 它也会成功地将其添加到购物车,但随后会替换产品 'Apple'带有 'Melon' 及其属性也带有 'Melon's'

这是系统打印的输出:

Cart:[contents=[Order:[item=Product:[productCode=01, description=Apple, unitPrice =99], quantity=1]]

添加第二个产品时:

Cart:[contents=[Order:[item=Product:[productCode=03, description=Melon, unitPrice =77], quantity=1], Order:[item=Product:[productCode=03, description=Melon, unitPrice =77], quantity=1]]

可能有用的代码:

购物车class:

//constructors
public Cart() {
    contents = new ArrayList<Order>();
    shopper = new Customer();
    deliveryDate = new Date();
    cartId = "Not set";
}
    public void addOrder(Order o) {
    contents.add(o);
}

订单class:

    //constructors
public Order() {
    item = new Product();
    quantity = 1;
}

产品class:

    public Product(String productCode, String description, int unitPrice) {
    this.productCode = productCode;
    this.description = description;
    this.unitPrice = unitPrice;
}

您创建了一个 Order 实例,并且在对 addToCartButtonClicked() 的每次调用中您更改了 Order 的乘积(通过调用 order.setProduct(shoppingTable.getSelectionModel().getSelectedItem()))并添加相同的Order 到你的 List.

因此您的 List 包含对同一个 Order 实例的多个引用。

你应该把

Order order = new Order();

在您的 addToCartButtonClicked() 方法中,为了向 List.

添加不同的 Order 实例
 public void addToCartButtonClicked(){
    //Set the variables of the cart.
    //Set customer to the cart.
    shoppingCart.setShopper(newCustomer);
    //Set Cart ID
    shoppingCart.setCartId(cartID);

    //Get selected product from the table, add to order then add to cart.
    ObservableList<Product> allProducts = shoppingTable.getItems();
    Order order = new Order();
    order.setProduct(shoppingTable.getSelectionModel().getSelectedItem());
    shoppingCart.addOrder(order);
    System.out.println(order);  
}