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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2个不同的项添加到ArrayList但最新的项目是两次?相关的知识,希望对你有一定的参考价值。

我有一个产品的TableView,它有描述,产品编号和价格,当用户在表格中选择产品并点击按钮时,它应该被添加到一个名为orderList的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'并且它的属性也与'甜瓜'有关

这是系统打印的输出:

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]]

可能有用的代码:

购物车类:

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

订单类:

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

产品类别:

    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()方法中,为了向Order添加不同的List实例。

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

以上是关于2个不同的项添加到ArrayList但最新的项目是两次?的主要内容,如果未能解决你的问题,请参考以下文章

如何从唯一且不重复的对象映射项目

java的ArrayList使用方法详解

尽管从 Firebase 添加了项目,但 ArrayList 的大小仍然为零

在java中将多个项目添加到已经初始化的arraylist

ArrayList与HashMap的用法

maven:添加相同的 2 个工件,但版本不同