4

だから、私が取り組んでいるこのプロジェクトがあり、独自の ArrayList クラスを作成する必要があります。すべてのメソッドを定義しましたが、コンパイルすると、3 つのメソッドで「シンボルが見つかりません」というエラーが発生し続けます。次のようなインターフェイスがあります。

public interface FBList {

    public int size();

public void insert(int i, Person person);

public Person remove(int i);

public Person lookUp(int i);

/**
*A class that defines a person
**/
public class Person {
    private String id;
    private long phoneNum;

    public Person(String personID, long phoneNum){
        id = personID;
        phoneNum = phoneNum;
    }
}

ご覧のとおり、内部クラスがあります。このインターフェイスを実装する他のファイルでそのクラスを使用しようとしています。現在、問題を引き起こしている他のファイルの3つの方法は次のとおりです。

/**
    * A method to expand the size of the array if the array is too small
    * @param i  One minus the place in the list where the component will be inserted
    * @param Person The person to be put in the list
    **/
    protected void expandInsert(int i, Person person){
        Person[] temp = new Person[arrayList.length * 2];
        for(int index = 0; index < temp.length; index++){
            if( i != index){
                if(i > 0)
                    temp[index] = arrayList[index];
                if(i == 0)
                    temp[index + 1] = arrayList[index];
            }
            else{
                temp[i] = person;
                i = 0;
                index--;
            }
        }
        arrayList = temp;
    }

/**
    * Inserts a new component at the end of a list by creating a new list longer that then last
    * @param i The place in the list where the component will be inserted
    * @param Person The person to be added to the list
    **/

protected void insertAtEnd(int i, Person person){
    Person[] temp = new Person[arrayList.length + 5];
    for(int index = 0; index < temp.length; index++){
        if(index != i){
            temp[index] = arrayList[index];
        }
        else{
            temp[index] = person;
        }
    }
    arrayList = temp;
}

/**
* Shrinks the array by one by removing one component from the array
* @param i The index to be removed
**/

protected void shrink(int i){
    Person[] temp = new Person[arrayList.length - 1];
    for (int index = 0; index < arrayList.length ; index++ ) {
        if (index < i) {
            temp[index] = arrayList[index];
        }
        else if (index == i){
            removedPerson = arrayList[index];
            temp[index] = arrayList[index + 1];
        }
        else{
            temp[index - 1] = arrayList[index];
        }
    }
}

これらのファイルはすべて同じフォルダーにあるため、問題はありません。「javac FBArrayList.java」と入力して、ターミナルを使用してコンパイルしています。私のコンパイラ出力は次のようになります。

 FBArrayList.java:106: cannot find symbol
symbol  : method expandInsert(int,FBList.Person)
location: class FBList.Person[]
            arrayList.expandInsert(i, person);
                     ^
FBArrayList.java:108: cannot find symbol
symbol  : method insertAtEnd(int,FBList.Person)
location: class FBList.Person[]
            arrayList.insertAtEnd(i, person);
                     ^
FBArrayList.java:118: cannot find symbol
symbol  : method shrink(int)
location: class FBList.Person[]
        arrayList.shrink(i);
                 ^
3 errors
4

1 に答える 1

8

は内部クラスであるため、その名前は外部クラスの名前で修飾Personする必要があります。

protected void expandInsert(int i, FBList.Person person){
    FBList.Person[] temp = new FBList.Person[arrayList.length * 2];
    ...
    // and so on...
}

編集: class はinterfacestatic内にネストされているため、make class の提案を削除しました。クラス内にネストされたクラスには、提案が必要でした。インターフェイスの場合はオプションです。static

于 2013-02-10T16:35:21.013 に答える