在一个类的实例上找不到公共符号变量(Java)

时间:2009-12-09 13:23:12

标签: java variables arraylist scope

我正在编写一个程序来计算两个节点之间的最短路径。在我的程序中,我有一个名为NodeList的自定义类,它包含一个字符串ArrayList(代表节点)以及一个距离。我正在使用Dijkstra的算法,该算法涉及从每个节点打开最短的边缘。所以,我使用这个循环来表示来自给定点的可能路线:

for ( NodeList ed : edges )
    {
     if (ed.nodeList.get(0).equals(node1))
     {
      routes.add(ed);
     }
    }

这很好用,并且似乎将正确的值加载到变量中(根据调试器)。但是,当我尝试将变量设置为其中一个节点的距离时,我收到一条消息“找不到符号变量距离”。以下是导致问题的代码:

int minDistance = routes.get(0).distance;

这是不正常还是有一些明显我遗失的东西?

3 个答案:

答案 0 :(得分:1)

如果节点列表不使用泛型,那么编译器无法确定您是get()哪个类型,这意味着它假设它是Object,这意味着它没有distance 1}}成员。

答案 1 :(得分:1)

get(0)显然返回了一个没有特定字段的类类型的对象。

根据问题的根本原因,有几种解决方案:

  • 尽可能参数化列表(例如NodeList<Route>而不是NodeList
  • 将其投放到正确的类型(例如int distance = ((Route) routes.get(0)).distance)
  • 公开该字段(例如public int distance;
  • 添加一个getter(例如public int getDistance() { return this.distance; })并使用它。

答案 2 :(得分:1)

您的代码没有意义。你说你有ArrayList Strings,但你正在寻找一个名为'距离'的成员。 String没有名为“distance”的公共字段。

您很可能需要声明ArrayList<SomeClassOfYours>来解决此问题,但我无法确定您发布的内容。