无法从列表中删除元素

时间:2015-04-08 17:51:17

标签: java

我正在开发一个更新购物车中商品数量的应用程序。下面是遍历项目输入列表并更新项目数量的代码段。

       for (int i = 0; i < InputOrder.size(); i++) {

            ProdRefCode = InputOrder.get(i).getProdRefCode();
            ProdModelNo = InputOrder.get(i).getProdRefCode();
            ProdCost = InputOrder.get(i).getProdCost();
            updatedQuantity =Integer.valueOf(request.getParameter("ddlQuantity" + i));
            UpdatedQuantity.add(updatedQuantity);
            Cart updateCart = new Cart(ProdRefCode, ProdModelNo, ProdCost, UpdatedQuantity);
            OutputOrder.add(updateCart);
            UpdatedQuantity.clear();
            updateCart = null;
            listCount = OutputOrder.size();
        }

我面临的问题是我的UpdatedQuantity持有多个值。我尝试清除UpdatedQuantity列表,但这会在我的updateCart中生成UpdatedQuantity = 0。我也尝试使用UpdatedQuantity.Remove(i),但这也是删除元素。

此外,我只想在我的所有列表中只有一个值。

有人可以帮我解决这个问题吗? 任何建议/帮助将不胜感激。


编辑:购物车代码

public class Cart {

    private List<String> _prodRefCode;
    private List<String>_prodModel;
    private List<Integer>_prodCost;
    private List<Integer>_prodQuantity;

    public Cart() {}

    public Cart(List<String> _prodRefCode, List<String> _prodModel, List<Integer> _prodCost, List<Integer> _prodQuantity) {
        this._prodRefCode = _prodRefCode;
        this._prodModel = _prodModel;
        this._prodCost = _prodCost;
        this._prodQuantity = _prodQuantity;
    }

    public List<String> getProdRefCode() {
        return _prodRefCode;
    }

    public void setProdRefCode(List<String> _prodRefCode) {
        this._prodRefCode = _prodRefCode;
    }

    public List<String> getProdModel() {
        return _prodModel;
    }

    public void setProdModel(List<String> _prodModel) {
        this._prodModel = _prodModel;
    }

    public List<Integer> getProdCost() {
        return _prodCost;
    }

    public void setProdCost(List<Integer> _prodCost) {
        this._prodCost = _prodCost;
    }

    public List<Integer> getProdQuantity() {
        return _prodQuantity;
    }

    public void setProdQuantity(List<Integer> _prodQuantity) {
        this._prodQuantity = _prodQuantity;
    }
}

2 个答案:

答案 0 :(得分:0)

我不认为你清楚地理解通过引用或价值体系传递的概念。

for (int i = 0; i < InputOrder.size(); i++) {
        ProdRefCode = InputOrder.get(i).getProdRefCode();
        ProdModelNo = InputOrder.get(i).getProdRefCode();
        ProdCost = InputOrder.get(i).getProdCost();
        updatedQuantity =Integer.valueOf(request.getParameter("ddlQuantity" + i));
        UpdatedQuantity.add(updatedQuantity);
        listCount = OutputOrder.size();
}
Cart updateCart = new Cart(ProdRefCode, ProdModelNo, ProdCost, UpdatedQuantity);
OutputOrder.add(updateCart);

这应该可以解决多值问题。如果这有帮助,请告诉我。

解释:以这种方式考虑我的代码。 UpdatedQuantity指向每次在for循环中推送新值的对象。因此,当您创建购物车(在您的代码中:传递UpdatedQuantity指针)时,您的cart.UpdatedQuantity指向更新的对象(新推送)。在我的代码中,当您UpdatedQuantity更新所需的所有值时,您将在循环之外创建购物车。

答案 1 :(得分:0)

如果您只希望列表中的一个元素作为参数传递给Cart构造函数,则可以在每次迭代中创建一个新元素,而不使用名为UpdatedQuantity的全局列表,例如

for (int i = 0; i < InputOrder.size(); i++) {
    ProdRefCode = InputOrder.get(i).getProdRefCode();
    ProdModelNo = InputOrder.get(i).getProdRefCode(); // same as above ?
    ProdCost = InputOrder.get(i).getProdCost();
    updatedQuantity =Integer.valueOf(request.getParameter("ddlQuantity" + i));

    // Create a list that holds one quantity value
    List<Integer> quantity = Arrays.asList(updatedQuantity);
    Cart updateCart = new Cart(ProdRefCode, ProdModelNo, ProdCost, quantity);
    OutputOrder.add(updateCart);

    listCount = OutputOrder.size(); // ?
}

到目前为止你已经尝试过,在迭代中清除列表并不好,因为每个Cart对象都有一个引用(我假设Cart没有复制列表,因为我们没有&#39;在UpdatedQuantity列表上有这个代码,我无法准确说明。这意味着最后,Cart中的所有OutputOrder实例将共享相同的列表,该列表应为空(如果在每次迭代时清除,或者在所有更新时清除,如果不清除)。