我正在为 java 项目制作购物车,但在向数组列表添加多个对象时遇到问题。
我的数组是在 Basket 类中创建的
package store;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.Spring;
public class Basket {
private double totalPrice;
public int orderNumber=1;
private ArrayList<Product> basket = new ArrayList<Product>();
在这个类中我也有方法
public ArrayList<Product> getBasket (){
return basket ;
}
在一个单独的类中,用户选择他想要的项目,然后单击一个按钮,创建一个 GolfBag(产品类的子类)。
GolfBags gb = new GolfBags(1,productType, productPrice, productName, quantity, colour, size);
b.getBasket().add(gb);
System.out.println(b.getBasket());
int counter=b.getBasket().size();
System.out.println(counter);
我第一次点击它时,它正确显示了顺序,但是第二次我希望它显示两个相同的项目,因为应该创建并添加两个对象,但计数器显示的数字仍然是一个并且该订单仅出现一次。对此的任何帮助将非常感激。
关于篮子在哪里创建的评论?它不是在 private ArrayListbasket = new ArrayList(); 行中创建的吗? ?
addGolfBag.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Basket b = new Basket ();
int productNumber = 0 ;
String productName = null ;
double productPrice = 0 ;
String productType = "BAG";
int quantity = 0;
String colour = null;
String size = null;
if (((String) golfBagOptions.getSelectedItem())
.equals("TaylorMade Juggernaut Cart Bag")){
productNumber=b.getOrderNumber();
productName="TaylorMade Juggernaut";
productPrice=(129*(Integer)golfBagQuanititySpinner.getValue());
quantity=(Integer)golfBagQuanititySpinner.getValue();
colour="BLUE";
size="LARGE";
}
if (((String) golfBagOptions.getSelectedItem())
.equals("Mizuno Golf Rider Cart Bag")){
productNumber=b.getOrderNumber();
productName="Mizuno Golf Rider";
productPrice=(99.99*(Integer)golfBagQuanititySpinner.getValue());
quantity=(Integer)golfBagQuanititySpinner.getValue();
colour="BLACK";
size="SMALL";
}
if (((String) golfBagOptions.getSelectedItem())
.equals("Titleist RC13 Reverse Cart Bag")){
productNumber=b.getOrderNumber();
productName="Titleist RC13 Reverse";
productPrice=(99.99*(Integer)golfBagQuanititySpinner.getValue());
quantity=(Integer)golfBagQuanititySpinner.getValue();
colour="SILVER";
size="LARGE";
}
if (((String) golfBagOptions.getSelectedItem())
.equals("Callaway Golf Euro Chev Org Cart Bag")){
productNumber=b.getOrderNumber();
productName="Callaway Golf Euro";
productPrice=(79*(Integer)golfBagQuanititySpinner.getValue());
quantity=(Integer)golfBagQuanititySpinner.getValue();
colour="BLUE";
size="MEDIUM";
}
GolfBags gb = new GolfBags(1,productType, productPrice, productName, quantity, colour, size);
b.getBasket().add(gb);
System.out.println(b.getBasket());
int counter=b.getBasket().size();
System.out.println(counter);
}});
最佳答案
好的。现在您发布了代码,错误很明显:
public void actionPerformed(ActionEvent e) {
Basket b = new Basket ();
因此,每次单击该按钮时,actionPerformed()
方法被调用。每次调用时,它都会创建一个新的 Basket 实例,其中包含一个新的 List<Product>
.
Basket 对象可能应该是 UI 类的一个字段,在构造函数中初始化,而不是 actionPerformed()
的局部变量。方法..
旁注:您不应将产品列表暴露给外部。你应该有一个方法 addProduct()
Basket 类中的方法,会将产品添加到列表中,并将产品的价格添加到总价中。这就是封装的意义所在。如果您希望该类的用户能够迭代产品,则返回列表的只读 View ,以防止他在您背后添加产品:return Collections.unmodifiableList(basket)
。
关于java - 数组列表中的对象不断替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077064/