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

问题描述:

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

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

这工作得很好,并显示为正确的值加载到变量(根据调试器)。但是,当我尝试将某个变量设置为其中一个节点的距离时,我收到一条消息“无法找到符号变量距离”。这里是导致问题的代码:

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

这是不正常还是有什么明显的我失踪?

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

有根据问题的根源几种解决方案:

  • 参数化列表中,如果可能的(例如NodeListNodeList<Route>代替)
  • 将它转换为正确的类型(例如int distance = ((Route) routes.get(0)).distance)
  • 使该字段公开(例如public int distance;
  • 添加一个吸气剂(例如public int getDistance() { return this.distance; })并使用它

如果节点列表没有使用泛型,那么编译器无法辨别出哪种类型是get() ing,这意味着它假设它是Object,这意味着它没有distance成员。

你的代码没有意义。你说你有一个ArrayListStrings,但你正在寻找一个叫'距离'的成员。字符串没有名为“距离”的公共字段。

最有可能你需要声明ArrayList<SomeClassOfYours>来解决这个问题,但我不能告诉你发布什么。

+0

他说这个清单有字符串和距离,听起来像他意味着他已经在使用一个类。 – abyx 2009-12-09 13:48:21