1

我在学校项目的嵌套类中遇到了一些麻烦。目前,我正在尝试编写一种将项目插入到参差不齐的数组数据结构中的方法。它使用由嵌套类创建的对象来跟踪二维数组位置,以便获取要插入的索引。但是,我在以下行收到错误“方法 findEnd(E) 未定义 RaggedArrayList.ListLoc 类型”:

insertLoc.findEnd(item)

我在 stackoverflow 和网络上都进行了广泛的搜索,但还没有找到答案。如果我错过了它并且这是多余的(我知道有很多“未定义类型问题的方法”),那么我道歉。

这是相关代码>>

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

会解决你的问题。

您正在尝试调用findEnd该类ListLoc,但如果您实际查看ListLoc,它并没有在那里定义。当您尝试调用findEndinsertLoc对象时,它会失败,因为它insertLoc是 的实例ListLoc,我们已经说过不包含findEnd

话虽这么说,我敢打赌它findItem实际上是在与方法相同的类中声明的add(让我们称之为它MyList),所以你想实际调用MyList.findEnd,而不是不存在的ListLoc.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 确实没有该名称的方法...

您的私有 ListLoc findEnd(E item) 定义在哪里?

于 2012-10-08T17:54:36.540 回答