-3

我试图为链表设计一个 get 方法。它将一个 int 位置作为参数,并返回给定位置的列表元素(位置从零开始)。

我认为我的逻辑是正确的,但没有编译。谁能指出我在这里做错了什么?

abstract public class AbstractListNode {

    abstract public Object first ( );
    abstract public AbstractListNode rest ( );
    abstract public boolean isEmpty ( );
    abstract public int size( );
    abstract public Object get(int index);
    // Every other list-processing method goes here.
}

class NonemptyListNode extends AbstractListNode {

    private Object myFirst;
    private AbstractListNode myRest;

    // cons in Scheme.
    public NonemptyListNode (Object first, AbstractListNode rest) {
        myFirst = first;
        if (rest == null) {
        myRest = new EmptyListNode ( );
        } else {
        myRest = rest;
        }
    }

    public NonemptyListNode (Object first) {
        this (first, new EmptyListNode ( ));
    }

    // car in Scheme.
    public Object first ( ) {
        return myFirst;
    }

    // cdr in Scheme.
    public AbstractListNode rest ( ) {
        return myRest;
    }

    public boolean isEmpty ( ) {
    return false;
    }

    public int size ( ) {
        return 1+myRest.size();
    }

    public Object get(int index){
        if(index+1 > this.size())
            throw new IllegalArgumentException ("Out of Range");
        else if(index == 0){
            return myFirst;
        }
        else{
            index = index-1;
            AbstractListNode l = this.myRest;
            l.get(index);
        }          
    }
}

class EmptyListNode extends AbstractListNode {

    public EmptyListNode ( ) {

    }

    public Object first ( ) {
        throw new IllegalArgumentException ("There is no 'first' value stored in an EmptyListNode.");
    }

    public AbstractListNode rest ( ) {
        throw new IllegalArgumentException ("No elements follow an EmptyListNode.");
    }

    public boolean isEmpty ( ) {
        return true;
    }

    public int size( ) {
        return 0;
    }

    public Object get(int index){
        throw new IllegalArgumentException ("Out of Range");
    }
}
4

1 回答 1

3

我在 NonemptyListNode 中的 get 方法中遇到错误

错误是您没有返回语句:

public Object get(int index){
    if(index+1 > this.size())
        throw new IllegalArgumentException ("Out of Range");
    else if(index == 0){
        return myFirst;
    }
    else{
        index = index-1;
        AbstractListNode l = this.myRest;
        l.get(index);
        /*
         * here you should have a return statement, if this else block 
         * gets executed, no returns will be found. 
         */   
    }          
}
于 2013-07-13T23:05:12.353 回答