2015-08-20 3 views
-2

Я пытаюсь добавить элементы в корзину. Если элемент существует, мне необходимо обновить количество (количество) элемента, вызвав метод. Я заставляю его работать, добавляя элементы, но когда я реализую часть, где нужно обновить существующий элемент, он больше не работает. Проверьте метод добавления и подтолкните меня в правильном направлении. Благодаря!!!Как добавить значение в LinkedList

import java.util.Set; 
import java.util.Map; 
import java.util.List; 
import java.util.HashMap; 
import java.util.LinkedList; 

public class ShoppingBasket { 

    private List<Purchase> basket; 

    public ShoppingBasket() { 
     basket = new LinkedList<Purchase>(); 
    } 

    public void add(String product, int price) { 

     for (Purchase item : basket) { // cycle through the list 

      if (item.getProduct().equals(product)) { // item exists, update qty 
       item.increaseAmount(); 
      } else { //item does not exist so add it to the list 
       basket.add(new Purchase(product, 1, price)); 
      } 
     } 
    } 

    public int price() { 
     int price = 0; 
     for (Purchase item : basket) { 
      price += item.price(); 
     } 
     return price; 
    } 

    public void print() { 
     for (Purchase item : basket) { 
      System.out.println(item); 
     } 
    } 
} 





public class Purchase { 
    private String product; 
    private int amount; 
    private int unitPrice; 

    public Purchase(String product, int amount, int unitPrice) { 
     this.product = product; 
     this.amount = amount; 
     this.unitPrice = unitPrice; 

    } 

    public String getProduct() { 
     return product; 
    } 


    public int price() { 
     // which returns the purchase price. This is obtained by raising the unit amount by the unit price 

     return this.amount * this.unitPrice; 
    } 

    public void increaseAmount() { 
     // increases by one the purchase unit amount 
     this.amount++; 
    } 

    public String toString() { 
     //returns the purchase in a string form like the following 
     return this.product + ": " + amount; 
    } 
} 
+2

Просьба описать _it не функционирует какой-либо longer._. –

+0

На самом деле он не добавляет элемент или не обновляется. Весь метод, похоже, просто перестает работать. – Ohlaph

+0

Вызывает ли это исключение! Если он не тот, кто помечен как дубликат, был просто ошибочен – LBes

ответ

1

Я думаю, что это может быть связано с тем, что ваш метод добавления не учитывает случай, когда корзина сначала пуста. Я могу ошибаться, так как я нахожусь на свой телефоне, и это трудно проверить код, но я предлагаю добавить что-то вроде:

If(basket.size()==0) basket.add(new Purchase(product, price)); 

Edit: Исключения теперь вы получите после добавления моего куска коды получает из-за тот факт, что вы на самом деле изменяете список и просматриваете его в одно и то же время. Это недопустимо (для удаления или добавления элементов в список).

Решение затем перебирает ваш список, пока вы не найдете позицию, в которой вы должны добавить новый элемент или изменить сумму с помощью цикла while, один раз вы закончили с тем, что можете просто использовать индекс для добавления в конце или для изменения суммы. Так как я нахожусь на моем телефоне я не буду использовать ваши имена переменных и все, но это было бы что-то вроде этого (отказ от ответственности не проверено)

int k=0 ; 
bool found=false ; 
while(k<list.size() && found==false){ 
    if(objectToAdd.equals(list.get(k)) found = true 
    k++ 
} 
if(k==list.size()) list.add(objectToAdd) 
else list.get(k-1).amount ++ ; 
+0

Пробовал это, но он генерирует исключение, когда я пытаюсь изменить список. ConcurrentModificationException – Ohlaph

+0

В этом случае ответ определенно указан в сообщении, если ваш вопрос был помечен как дубликат. Редактировать на пути, чтобы помочь вам больше – LBes

+0

Я вижу, я не могу изменить, итерации по списку. Благодаря! – Ohlaph

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