我正在开发一个更新购物车中商品数量的应用程序。下面是遍历项目输入列表并更新项目数量的代码段。
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;
}
}
答案 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
实例将共享相同的列表,该列表应为空(如果在每次迭代时清除,或者在所有更新时清除,如果不清除)。