Попытка добавить список массивов к объекту корзины - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь добавить что-то в корзину, поэтому в моем классе продуктов я создал такую ​​корзину:

private ArrayList<String> shoppingCart;

Я создал функцию добавления корзины, которая также добавляет в эту корзину, например:

public void addToBasket(String barcode, double price, int quantity) {
    List<String> temp = new ArrayList<String>(Arrays.asList());
    temp.add(barcode);
    temp.add(Double.toString(price));
    temp.add(Integer.toString(quantity));

    shoppingCart.add(temp);

однако остальная часть функции работает, но я продолжаю получать ошибку в этой строке:

shoppingCart.add(temp);

я не уверен, почему это происходит.

Ответы [ 4 ]

2 голосов
/ 08 мая 2020

Как правильно указал @Bashir, вы добавляете разные types переменных к определенному c типу ArrayList<String> shoppingCart.

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

Object этого экземпляра ArrayList<String> может получить только String по методу add().

Это не позволяет вам add price, а также quantity, потому что temp - это ArrayList<String>, а не ArrayList<Integer> или ArrayList<Double>.

Ваша работа заключается в том, чтобы преобразовать его в String и добавить его в ArrayList<String> temp, что является программно правильным, но это не Object Oriented Programming.

  • Почему ArrayList<ArrayList<String>> shoppingCart; у вас не сработает:

Краткий пример:

Допустим, вы получаете вложенный ArrayList<String> вот так:

ArrayList<String> itemDetails = shoppingCart.get(0);
// which item belong to which shopping cart?

Чтобы сделать эту работу вы должны count каждые 3 ArrayList Objects, чтобы получить из shoppingCart содержимое.

Вот так:

ArrayList<String> itemDetails = shoppingCart.get(0);
String details[] = new String[3];
details[0]=itemDetails.get(0);//barcode
details[1]=itemDetails.get(1);//price
details[2]=itemDetails.get(2);//quantity

У вас понимаете, куда я собираюсь с этим?

Оптимальный способ сделать это, как указал @Bashir.

2 голосов
/ 08 мая 2020

проблема возникает из-за того, что вы пытаетесь добавить List<String> к shoppingCart, который имеет тип ArrayList<String>

Чтобы решить эту проблему, я предлагаю создать, например, новый класс с именем Item, который будет быть типом вашего temp экземпляра

public class Item{
    private String barcode;
    private double price;
    private int quantity;

    public Item(String barcode, double price, int quantity){
        this.barcode = barcode;
        this.price = barcode;
        this.quantity = barcode;
    }

    //getters and setters
}

тогда ваша shoppingCart будет ArrayList Items

private ArrayList<Item> shoppingCart;

, и вам нужно изменить свой метод addToBasket следующим образом

public void addToBasket(String barcode, double price, int quantity) {
    Item temp = new Item(barcode,price,quantity);
    shoppingCart.add(temp);
}

и для остальной части вашей программы вы должны внести необходимые изменения, вы должны помнить, что теперь ваш shoppingCart содержит объекты типа Item

1 голос
/ 08 мая 2020

shoppingCart имеет тип ArrayList<String>, но вы пытаетесь добавить к нему List<String>. Либо вам нужно изменить shoppingCart на List<List<String>>, либо, если вы хотите добавить все записи одну за другой в список, вам нужно переписать shoppingCart.add(temp); на shoppingCart.addAll(temp);.

0 голосов
/ 08 мая 2020

Ваш shoppingCart - это список строк, что означает, что каждый элемент, который вы хотите вставить, должен быть строкой.
Ваш temp не является строкой, это также массив строк, поэтому он может ' т работать. Если ваше определение temp действительно то, что вы хотите, тогда определение shoppingCart должно быть:

private ArrayList<ArrayList<String>> shoppingCart;
...