在类的一个实例(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)
显然返回了一个没有特定字段的类类型的对象。
有根据问题的根源几种解决方案:
- 参数化列表中,如果可能的(例如
NodeList
NodeList<Route>
代替) - 将它转换为正确的类型(例如
int distance = ((Route) routes.get(0)).distance)
- 使该字段公开(例如
public int distance;
) - 添加一个吸气剂(例如
public int getDistance() { return this.distance; }
)并使用它
答
如果节点列表没有使用泛型,那么编译器无法辨别出哪种类型是get()
ing,这意味着它假设它是Object
,这意味着它没有distance
成员。
答
你的代码没有意义。你说你有一个ArrayList
的Strings
,但你正在寻找一个叫'距离'的成员。字符串没有名为“距离”的公共字段。
最有可能你需要声明ArrayList<SomeClassOfYours>
来解决这个问题,但我不能告诉你发布什么。
他说这个清单有字符串和距离,听起来像他意味着他已经在使用一个类。 – abyx 2009-12-09 13:48:21