1

学校のプロジェクトでネストされたクラスで問題が発生しています。現在、ジャグ配列のデータ構造にアイテムを挿入するメソッドを作成しようとしています。ネストされたクラスによって作成されたオブジェクトを使用して、挿入するインデックスを取得するために2D配列の場所を追跡します。ただし、次の行に「メソッドfindEnd(E)がタイプRaggedArrayList.ListLocに対して未定義です」というエラーが表示されます。

insertLoc.findEnd(item)

私はstackoverflowとWebの両方で広範囲に検索しましたが、まだ答えが見つかりませんでした。私がそれを見逃し、これが冗長である場合(「タイプの質問に対して未定義のメソッド」がたくさんあることを私は知っています)、私は謝罪します。

関連するコードは次のとおりです>>

ListLocオブジェクトのネストされたクラス:

private class ListLoc {
  public int level1Index;
  public int level2Index;

  public ListLoc() {}

  public ListLoc(int level1Index, int level2Index) {
     this.level1Index = level1Index;
     this.level2Index = level2Index;            
  }

  public int getLevel1Index() {
     return level1Index;
  }

  public int getLevel2Index() {
     return level2Index;
  }

  // since only used internally, can trust it is comparing 2 ListLoc's
  public boolean equals(Object otherObj) {
     return (this == otherObj);
  }
}

一致するアイテム(ListLocネストされたクラスの一部ではない)の最後のインデックスを見つけるメソッド:

private ListLoc findEnd(E item){
  E itemAtIndex;

  for (int i = topArray.length -1; i >= 0; i--) {
     L2Array nextArray = (L2Array)topArray[i];

     if (nextArray == null) {
        continue;

     } else {

        for (int j = nextArray.items.length -1; j >= 0; j--) {
           itemAtIndex = nextArray.items[j];
           if (itemAtIndex.equals(item)) {
              return new ListLoc(i, j+1);
           }
        }
     }
  }

  return null;

}

不規則な配列に新しい値を追加しようとするメソッド:

boolean add(E item){
  ListLoc insertLoc = new ListLoc();
  insertLoc.findEnd(item);

  int index1 = insertLoc.getLevel1Index();
  int index2 = insertLoc.getLevel2Index();

  L2Array insertArray = (L2Array)topArray[index1];
  insertArray.items[index2] = item;

  return true;

}

ご入力いただきありがとうございます。

4

4 に答える 4

2

私はこれを変えることに賭けるつもりです:

ListLoc insertLoc = new ListLoc();
insertLoc.findEnd(item);

これに:

ListLoc insertLoc = findEnd(item);

問題を解決します。

クラスを呼び出そうとしていますfindEndListLoc、実際に見てみるとListLoc、そこでは定義されていません。オブジェクトを呼び出そうとするとfindEnd、はのインスタンスであるinsertLocため失敗しますが、これにはすでにが含まれていません。insertLocListLocfindEnd

そうは言っても、実際にはメソッドfindItemと同じクラスで宣言されているので(単にそれを呼び出しましょう)、存在しないものではなく、実際に呼び出したいと思います。addMyListMyList.findEndListLoc.findEnd

于 2012-10-08T17:57:02.657 に答える
0

あなたはほとんどあなた自身の質問に答えました。あなたはListLocオブジェクトでfindEndを呼び出そうとしていますが、ListLocはfindEndメソッドを定義していません。あなたはどちらかをする必要があります

a)findLocの実装をListLocまたは

b)適切なオブジェクトでfindLocを呼び出します(他のクラスに関する情報を提供していないため、あまり多くのことを言うことはできません)

于 2012-10-08T17:52:43.683 に答える
0

一致するアイテム(ListLocネストされたクラスの一部ではない)の最後のインデックスを見つけるメソッド:

そうです-それは...の一部ではありませんListLocが、ここで呼び出すと:

ListLoc insertLoc = new ListLoc();
insertLoc.findEnd(item);

...クラスの一部であるのようにそれを呼び出そうとしています。そうではないので、そのように呼ぶことはできません。

に移動するかListLoc、メソッドの呼び出し方法を変更してください。

于 2012-10-08T17:52:51.633 に答える
0

私がこれを正しく読んでいるかどうかはわかりませんが、あなたの説明から、findEndメソッドはクラスの外部で定義されているように見えます。したがって、ListLocには実際にその名前のメソッドがありません...

プライベートListLocfindEnd(Eアイテム)はどこで定義されていますか?

于 2012-10-08T17:54:36.540 に答える