2014-06-20 8 views
-1

이것은 오늘 Java 클래스에서 아무런 문제없이 실행되는 예제이지만 새 프로젝트에 파일을 추가 할 때 다음 오류가 발생합니다. 파일을 잘못 추가했거나 교수가 약간 다른 버전의 파일을 사용하고 있었는지 알려주실 수 있습니까? 이 오류의 원인과 해결 방법을 알려주십시오. ArrayGSackIterable.java :유형 ArrayGSackIterable <T>은 상속 된 추상 메소드 GSackIterableADT <T> .remove()를 구현해야합니다.

enter image description here

파일 각각에 대한 코드는 다음과 같습니다 수입 java.util.Iterator를;

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

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

} 

및 ArrayGSackIterator.java에 대한

: GSackIterableADT.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() { 

    } 

} 

마지막 :

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(); 
} 

UPDATE : 분명히 나는 ​​다른 .zip 파일에서이 두 파일을 추가했다. GSackADT.java :

import java.util.NoSuchElementException; 

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

ArrayGSack.java : 귀하의 코드는 인터페이스 GSackIterableADT에서 구현되지 않은 방법 remove에 대한 불평

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]; 
    } 
} 
+0

클래스'ArrayGSackIterable' 구현하는'GSackIterableADT'하지만, 모든 추상 메소드 구현을 제공하지 않습니다. –

+0

'ArratGSack '이란 무엇입니까? –

답변

2

. 귀하의 교수는이 중 하나를 할 수도 그것을 실행하려면 :

  • 가 삭제 remove 방법 추상 클래스와 인터페이스
  • 표시된 ArrayGSackIterableGSackIterableADT에서
+0

제거와 관련된 모든 코드에 주석을 달았지만 오류가 나타납니다. 두 번째 접근 방식에 관해서는 어떻게해야할지 모르겠다. 가능한 코드 조각으로 더 정교해질 수 있습니까? –

+0

@MonaJalal 두 번째 방법은 클래스 정의에 abstract를 추가하면됩니다. public abstract class ArrayGSackIterable. 그러나 클래스 추상을 표시하면 인스턴스화 할 수 없습니다. 그런 다음 확장되고 사용되어야합니다. –

+0

잘 도움이되지 않았습니다. 그것은 ArrayGSack이 타입으로 해석 될 수 없다고 말합니다! –