2015-04-08 3 views
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); 
      Cart updateCart = new Cart(ProdRefCode, ProdModelNo, ProdCost, UpdatedQuantity); 
      OutputOrder.add(updateCart); 
      UpdatedQuantity.clear(); 
      updateCart = null; 
      listCount = OutputOrder.size(); 
     } 

Проблема я столкнулся в том, что мой UpdatedQuantity держит несколько значений. Я попытался очистить список UpdatedQuantity, но это, в свою очередь, сделало бы UpdatedQuantity = 0 в моей обновленной карте. Я также попытался использовать UpdatedQuantity.Remove(i), но это также удаляет элемент.

Также мне нужно всего лишь одно значение во всех моих списках.

Может ли кто-нибудь помочь мне с этим? Любое предложение/помощь будет оценена по достоинству.


EDIT: Корзина Код

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

Что такое класс «Обновленный Quantity» с капиталом «U»? –

+0

@YazadKhambata Похоже на «Список » – Sirac

+0

Ну, тогда это не должно быть «Обновлено Quantity = 0» в прозе ниже фрагмента кода. –

ответ

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 не копируя список, так как мы не имеем этот код, я точно не могу сказать) в списке UpdatedQuantity. Это означает, что в конце все экземпляры Cart в OutputOrder будут иметь один и тот же список, который должен быть пустым (если он очищается на каждой итерации или со всеми обновлениями, если не очищается).

+0

yup .. !! это работает так, как я этого хотел .. :) Большое спасибо ..! –

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 всех необходимых значений.

+0

Извините, но я действительно не могу видеть разницу, я думаю, что я сделал то же самое, дело в том, что при повторном выполнении оно содержит несколько значений. –

+0

см. Мое объяснение –

+0

Да, я видел, но это тоже не помогает .. :) Я думаю, я изменю свой подход .. плохо отбросьте список и просто поеду с int .. как это предложил @ Abbé Résina .. спасибо eveyone за ваша помощь .. :) –

Смежные вопросы