方法未定义类型Java,嵌套类

时间:2012-10-08 17:49:31

标签: java arrays nested-class

我在学校的项目中遇到嵌套类的问题。 目前,我正在尝试编写一个方法来将项插入到一个参差不齐的数组数据结构中。 它使用由嵌套类创建的对象来跟踪2d数组位置,以便获取要插入的索引。但是,我收到错误“方法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 个答案:

答案 0 :(得分:2)

我打算改变这个:

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

对此:

ListLoc insertLoc = findEnd(item);

将解决您的问题。

您尝试在findEnd课程上致电ListLoc,但如果您实际查看ListLoc,则不会在那里定义。当您尝试在findEnd对象上调用insertLoc时,它会失败,因为insertLocListLoc的实例,我们已经说过它不包含findEnd

话虽如此,我敢打赌,findItem实际上是与add方法在同一个类中声明的(让我们称之为MyList),所以你想要实际上是拨打MyList.findEnd,而不是不存在的ListLoc.findEnd

答案 1 :(得分:0)

你几乎回答了自己的问题..你试图在ListLoc对象上调用findEnd,但ListLoc没有定义一个findEnd方法。你需要

a)将findLoc的实现添加到ListLoc或

b)在正确的对象上调用findLoc(你没有提供有关另一个类的信息,所以我不能说太多关于它)

答案 2 :(得分:0)

  

查找匹配项的最后一个索引的方法(不是ListLoc嵌套类的一部分):

是的 - {em>不是 ListLoc的一部分......但是当你在这里打电话时:

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

...你试图把它称为 类的一部分。它不是,所以你不能这样称呼它。

将其移至ListLoc,或更改您调用该方法的方式。

答案 3 :(得分:0)

我不确定我是否正确读取此内容,但从您的解释看起来似乎是在您的类之外定义了findEnd方法,因此ListLoc确实没有该名称的方法...

您的私人ListLoc findEnd(E项)在哪里定义?