Тип ArrayGSackIterable должен реализовывать унаследованный абстрактный метод GSackIterableADT.remove()

#java #eclipse #iterator #iterable

#java #затмение #итератор #итеративный

Вопрос:

Это пример, выполняемый в нашем классе Java сегодня без проблем, но когда я добавил файлы в новый проект, у меня возникла следующая ошибка. Не могли бы вы сказать мне, если я добавил файлы неправильно или, может быть, профессор использовал немного другую версию файлов? Можете ли вы сообщить мне, в чем причина этой ошибки и как ее исправить?

введите описание изображения здесь

Код для каждого файла выглядит следующим образом: ArrayGSackIterable.java : импортировать java.util.Итератор;

 public class ArrayGSackIterable<T> extends ArrayGSack<T> implements GSackIterableADT<T> {

    public Iterator<T> iterator() {
        return new ArrayGSackIterator<T>(items, numItems);
    }

}
 

и для ArrayGSackIterator.java:

 import java.util.Iterator;
import java.util.NoSuchElementException;


public class ArrayGSackIterator<E> implements Iterator<E> {

    private E[] items;
    private int numItems, curr;

    public ArrayGSackIterator(E[] gsackitems, int num) {
        items = gsackitems;
        numItems = num;
    }

    public boolean hasNext() {
        return curr < numItems;
    }

    public E next() {
        if (!hasNext()) throw new NoSuchElementException();
        return items[curr  ];
    }

    public void remove() {

    }

}
 

и, наконец, для GSackIterableADT.java:

 import java.util.Iterator;
import java.util.NoSuchElementException;

public interface GSackIterableADT<T> extends Iterable<T> {
        void add(T item);
        T remove() throws NoSuchElementException;
        boolean isEmpty();
        Iterator<T> iterator();
}
 

ОБНОВЛЕНИЕ: по-видимому, мне пришлось добавить эти два файла из другого ZIP-файла. GSackADT.java:

 import java.util.NoSuchElementException;

public interface GSackADT<T> {
    void add(T item);
    T remove() throws NoSuchElementException;
    boolean isEmpty();
}
 

ArrayGSack.java:

 import java.util.NoSuchElementException;

public class ArrayGSack<T> implements GSackADT<T> {

    // Internal storage and accounting members
    protected T[] items;
    protected int numItems;
    private static final int INIT_SIZE = 100;

    public ArrayGSack() {
        items = (T[]) new Object[INIT_SIZE];
        numItems = 0;
    }

    public void add(T item) {
        if (numItems == items.length) expandStorage();
        items[numItems  ] = item;
    }

    public T remove() throws NoSuchElementException {
        if (numItems < 1) throw new NoSuchElementException();
        return items[numItems--];
    }

    public boolean isEmpty() {
        return numItems == 0;
    }

    // Internal method to handle capacity issues
    private void expandStorage() {
        T[] oldItems = items;
        items = (T[]) new Object[2 * items.length];
        for (int i = 0; i < oldItems.length; i  ) 
            items[i] = oldItems[i];
    }
}
 

Комментарии:

1. ваш класс ArrayGSackIterable реализует GSackIterableADT , но не предоставляет реализацию для всех абстрактных методов

2. Что такое ArratGSack ?

Ответ №1:

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

  • Удаленный remove метод из GSackIterableADT интерфейса
  • Помечен ArrayGSackIterable как абстрактный класс

Комментарии:

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

2. @MonaJalal Для второго подхода просто добавьте abstract в определение вашего класса: общедоступный абстрактный класс ArrayGSackIterable . Но если вы отметите класс abstract, вы не сможете создать его экземпляр. Тогда он будет предназначен для расширения и использования.

3. ну, это не помогло. В нем говорится, что ArrayGSack не может быть преобразован в тип!

4. @MonaJalal это, по-видимому, является причиной вашей проблемы, вам также нужен класс ArrayGSack .