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但最新的项目是两次?的主要内容,如果未能解决你的问题,请参考以下文章