Как исправить метод addToCart этого класса? - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно создать код для метода addToCart, чтобы добавить элемент в itemList.Я рассмотрел другие проблемы с ShoppingCart здесь, но я не вижу такой, которая увеличивает количество товара и проверяет имя товара, чтобы увидеть, находится ли он в массиве ... Проблема в

1) если элемент с именем, переданным в параметре, уже существует в itemList, обновите это количество элементов, увеличив его на количество, переданное в.

2), если в itemList нет имени элемента и существуетэто пространство для нового элемента, создайте новый объект элемента с заданными именем, количеством и ценой, переданными в качестве параметра, обновите numItems на 1.

3) в обоих случаях должно возвращаться значение true.

4) если элемент с заданным именем не был в массиве и массив не имеет емкости, метод должен вернуть false ...

5) завершить метод dispay, чтобы распечататьимя, общая цена и количество каждого элемента в itemList

Я создал метод getItemIndex и не уверен, нужно ли мне использовать его в этом методе.Поскольку я смотрел на другие методы addtoCart, я думаю, что это другой.

Я пробовал цикл for, и он не вернул то, что я хотел, поэтому я создал новые объекты, но я не могу заставить объекты оставаться содержащимися в массиве объектов.

Класс предметов

public class Items{
    private String name;
    private double price;
    private int quantity;

    public Items (String n, double p, int q){
        name = n;
        price = p;
        quantity = q;
    }
    public double getPrice(){
        return price;
    }
    public String getName(){
        return name;
    }
    public int getQuantity(){
        return quantity;
    }
    public void addQuantity(int amt){
        int newQuantity = amt + quantity;
        quantity = newQuantity;
    }
    public String toString(){
        return "item name: " + name + ", item quantity: " + quantity + 
        ", total price: " + (price * quantity);
    }
}

Класс ShoppingCart

public class ShoppingCart{

    //TODO: declare a cart of Items
    private Items[] itemList;
    //TODO: declare the number of distinct items in the cart
    private int numItems = 0;
    private static final int INITIAL_CAP = 5; // the initial size of the cart
    private static final int GROW_BY=3;


    // ---------------------------------------------------------
    // Creates an empty shopping cart with a capacity for 5 items.
    // ---------------------------------------------------------
    public ShoppingCart(){
        itemList = new Items[INITIAL_CAP];
        numItems = 0;
    }
    public double getTotalPrice(){
        double totalPrice = 0;
        numItems = 0;
        for(int i = 0; i<itemList.length; i++){
            if(itemList[i]!= null){
                totalPrice = totalPrice + (itemList[i].getQuantity()*itemList[i].getPrice());
                numItems++;
            }
        }
        return totalPrice;
    }
    private int getItemIndex(String nameOfItem){
    for(int i = 0; i < itemList.length; i++){
        if(itemList[i].getName().equals(nameOfItem))
            return i;
        }
        return -1;
    }
    public boolean addToCart(String name, double price, int quantity){
        Items n = new Items (name, price, quantity);

        if(numItems == INITIAL_CAP)
            return false;
        itemList[numItems]=n;
        if(itemList[numItems].getName().equals(name)){
            quantity = quantity + 1;
            return true;
        }
        else if (!itemList[numItems].getName().equals(name)){
            numItems = numItems + 1;
            return true;
        }

        return false;
    }
    public String display(){

        for(int i = 0; i<numItems; i++){
            System.out.println(itemList[i].toString());

        }
        return toString();

    }
}

Результат должен поместить элементы в массив и остаться там, поэтому, когда я вызываю его в моемосновной метод, он останется в массиве и должен печататься так, когда я назову его

молоко $ 3,00 1 $ 3,00
яйца $ 3,00 1 $ 3,00

и т. д ... Это будет напечатано bмой метод симуляции, но я не могу понять, как заставить предметы оставаться в корзине.

1 Ответ

0 голосов
/ 24 апреля 2019

Здесь есть пара проблем. Во-первых, вы устанавливаете itemList[numItems] еще до того, как проверили, существует ли уже имя элемента, переданного в addToCart, в списке элементов. Во-вторых, вы не проверяете весь список, вы проверяете только элемент с индексом numItems, который в этом случае всегда будет иметь значение true, поскольку вы устанавливаете itemList[numItems] для нового элемента перед проверкой, если имя уже существует. Чтобы решить эту проблему, я бы предложил запустить цикл for от i = 0 до numItems и проверить наличие имени нового элемента. Как только вы подтвердите, что он не существует, добавьте новый элемент и увеличьте numItems. Однако, если товар уже существует, обновите его и верните. Наконец, проверка, чтобы увидеть, заполнен ли список элементов, должна быть сделана после того, как вы итерировали весь список, чтобы видеть, существует ли элемент уже. Причина этого заключается в том, что вам необходимо обновить существующие количества товара, даже если список полон. Поэтому, прежде чем пытаться добавить новый элемент, вы должны проверить, достаточно ли места в списке.

public boolean addToCart(String name, double price, int quantity){
    Items n = new Items (name, price, quantity);

    for(int i = 0; i < numItems; i++){
        if(itemList[i].getName().equals(name)) {
            itemList[i].quantity += quantity;
            return true;
        }
    }

    if(numItems == INITIAL_CAP)
        return false;

    itemList[numItems] = n;
    numItems += 1;
    return true;
}
...