我有以下格式的2个文件(节点和费用)
节点文件为(Startnode,endnode)
A B
A C
成本文件为(节点,成本)
A 6
B 5
C 8
如果用户指定的startnode为'A',则以下方法应在节点文件中搜索A,然后添加相应的结束节点(在本例中为B,C)
列表neighbournodes
如果这些结束节点与成本文件中的节点匹配,则应将相应的成本(在本例中为5,8)添加到列表h_cost
所以,我得到了以下循环来做到这一点。我的neighbournodes
工作正常(即它正在输出B,C)但不知何故我的h_cost
没有输出5,8而是输出空列表。
for(int i=0; i<size; i++) {
if(startnode.equalsIgnoreCase(nodes[i].getStartNode()))
{
neighbournodes.add(nodes[i].getEndNode());
int newi = i;
if(nodes[newi].getEndNode().equalsIgnoreCase(cost[i].getNode()))
{
h_cost.add(cost[i].getCost());
}
}
}
System.out.println("neighbouring nodes are "+neighbournodes);
System.out.println("H_cost is "+h_cost);
我不确定我的循环在哪里出错,任何人都能告诉我出错的地方吗?我应该使用增强型for循环吗?
答案 0 :(得分:3)
您不应该为循环使用相同的索引变量。试试这个:
for(int i = 0; i < size; i++) {
if(startnode.equalsIgnoreCase(nodes[i].getStartNode())) {
neighbournodes.add(nodes[i].getEndNode());
for(int j = 0; j < cost.length; j++) {
if(nodes[i].getEndNode().equalsIgnoreCase(cost[j].getNode())) {
h_cost.add(cost[j].getCost());
}
}
}
}
System.out.println("neighbouring nodes are "+neighbournodes);
System.out.println("H_cost is "+h_cost);
逻辑对我来说似乎没问题,但使用相同的索引可能会弄乱它的价值。此外,我假设cost.length
将等于成本文件中的条目。