2014-06-20 37 views
-1

这是一个在我们的Java类中运行的示例,没有任何问题,但是当我将这些文件添加到新项目中时,出现以下错误。你能否告诉我,如果我错误地添加了文件,或者教授是否使用了稍微不同的文件版本?你能告诉我这个错误的原因是什么,以及如何解决这个错误?类型ArrayGSackIterable <T>必须实现继承的抽象方法GSackIterableADT <T> .remove()

enter image description here

用于每个文件的代码是如下:ArrayGSackIterable.java: 进口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:

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

类'ArrayGSackIterable'实现'GSackIterableADT'但不提供所有抽象方法的实现 –

+0

什么是'ArratGSack'? –

回答

2

你的代码是从界面GSackIterableADT抱怨对未实现的方法remove。 你的教授可能会做任何的这些,使其运行:

  • 删除remove方法从GSackIterableADT接口
  • 标记ArrayGSackIterable为抽象类
+0

我评论了所有与删除相关的代码,但我收到错误。关于第二种方法,我不知道如何去做。你可以用一些可能的代码更精细一些吗? –

+0

@MonaJalal对于第二种方法,只需在您的类定义中添加抽象:public abstract class ArrayGSackIterable。但是,如果您标记抽象类,您将无法实例化它。那么它将被扩展和使用。 –

+0

以及它没有帮助。它说ArrayGSack不能被解析为一种类型! –

相关问题