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

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


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

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


这是异常现象还是我明显缺少了什么?

最佳答案

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

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


尽可能对列表进行参数化(例如,使用NodeList<Route>代替NodeList
将其投射为正确的类型(例如int distance = ((Route) routes.get(0)).distance)
公开此字段(例如public int distance;
添加一个吸气剂(例如public int getDistance() { return this.distance; })并使用它。

09-30 16:09
查看更多