我正在编写一个程序来计算两个节点之间的最短路径。在我的程序中,我有一个名为NodeList的自定义类,它包含一个字符串ArrayList(代表节点)以及一个距离。我正在使用Dijkstra的算法,该算法涉及从每个节点打开最短的边缘。所以,我使用这个循环来表示来自给定点的可能路线:
for ( NodeList ed : edges )
{
if (ed.nodeList.get(0).equals(node1))
{
routes.add(ed);
}
}
这很好用,并且似乎将正确的值加载到变量中(根据调试器)。但是,当我尝试将变量设置为其中一个节点的距离时,我收到一条消息“找不到符号变量距离”。以下是导致问题的代码:
int minDistance = routes.get(0).distance;
这是不正常还是有一些明显我遗失的东西?
答案 0 :(得分:1)
如果节点列表不使用泛型,那么编译器无法确定您是get()
哪个类型,这意味着它假设它是Object
,这意味着它没有distance
1}}成员。
答案 1 :(得分:1)
get(0)
显然返回了一个没有特定字段的类类型的对象。
根据问题的根本原因,有几种解决方案:
NodeList<Route>
而不是NodeList
)int distance = ((Route) routes.get(0)).distance)
public int distance;
)public int getDistance() { return this.distance; }
)并使用它。答案 2 :(得分:1)
您的代码没有意义。你说你有ArrayList
Strings
,但你正在寻找一个名为'距离'的成员。 String没有名为“distance”的公共字段。
您很可能需要声明ArrayList<SomeClassOfYours>
来解决此问题,但我无法确定您发布的内容。