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);
}
我有一个包含描述、产品编号和价格的产品的 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);
}