java - 数组列表中的对象不断替换?

标签 java methods arraylist field

我正在为 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/

相关文章:

java - 如何更改selenium中的表数据

c# - Nullable.GetUnderlyingType 无法正常工作

c# - 使用方法的C#控制台应用程序编译错误(初学者寻求帮助)

java - size() 在 java 的 ArrayList 类中如何工作?

javascript - 无法断言数组列表中存在关键字

java - 在到达服务器之前分析http Rest请求

java - OpenCV Android 背景减法

java - 如何从ArrayList中获取元素?

Java战舰检查命中位置

java - Java 掷骰子分配 : Calling a Method