Реализация сумки, добавление предметов в сумку без дублирования

Я пытаюсь реализовать ADT MarblesBag в java, где элементом мешка являются шарики, и каждый шарик имеет два атрибута: цвет и вес (поэтому каждый шарик представляет собой тройку (имя предмета, цвет, вес). Я изо всех сил пытаюсь реализовать метод, который добавляет мрамор в сумку и выдает исключение для дублирующихся шариков.Вот мой код,

public void add(Item item) {
        Node<Item> previousnode = first;
        first = new Node<Item>();
        first.item = item;
        first.next = previousnode;
        n++;

Как я могу добавить исключение для повторяющихся элементов в методе?


person ssaha96    schedule 23.01.2020    source источник
comment
Используйте набор Java. docs.oracle.com/javase/7/docs/ API/java/util/Set.html   -  person joemokenela    schedule 23.01.2020


Ответы (1)


Это потребует реализации и вызова метода, который будет проверять, существует ли новый элемент в вашей коллекции. Этот метод, вероятно, должен быть вызван в начале public void add(Item item) и должен выполнять итерацию по всем элементам, которые в настоящее время присутствуют. Сигнатура метода может быть:

private void isAlreadyPresent(Item item) throws ItemAlreadyPresentException{
  .. go through all elements and compare with *item*
  .. if match found
  throw new ItemAlreadyPresentException();
  .. if there is no match then finish method
}

Затем вы можете использовать его перед фактическим добавлением нового элемента:

   public void add(Item item) {
         try {
          isAlreadyPresent(item);
         } catch (ItemAlreadyPresentException e) {
           .. do not add element
           return;
         }
         Node<Item> previousnode = first;
         ...
         n++;
    }
}

В Java уже есть коллекция, которая не допускает дублирования элементов — она называется Установить.

person Piotr Niewinski    schedule 23.01.2020