我正在为一个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);
我第一次点击它,它正确地显示了顺序,但是第二次我希望它显示两个相同的项目,因为应该创建和添加两个对象但是计数器显示的数字仍然是一个并且订单只出现一次。对此的任何帮助都将非常感激。
关于篮子创建地点的评论?它不是在行中创建的私有ArrayList basket = 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);
}});
答案 0 :(得分:1)
行。现在您发布了代码,错误显而易见:
public void actionPerformed(ActionEvent e) {
Basket b = new Basket ();
因此,每次单击该按钮时,都会调用actionPerformed()
方法。每次调用它时,它都会创建一个新的Basket实例,其中包含一个新的List<Product>
。
Basket对象可能应该是UI类的字段,在构造函数中初始化,而不是actionPerformed()
方法的局部变量..
附注:您不应将产品列表暴露给外部。您应该在Basket类中使用方法addProduct()
方法,将产品添加到列表中,并将产品的价格添加到总价中。这就是封装的全部内容。如果您希望该类的用户能够遍历产品,则返回列表的只读视图,以防止他在您的背后添加产品:return Collections.unmodifiableList(basket)
。