我正在编写一个程序来计算两个节点之间的最短路径。在我的程序中,我有一个名为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; }
)并使用它。