for循环java无法正常工作

时间:2015-05-16 02:03:59

标签: java if-statement for-loop

我有以下格式的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循环吗?

1 个答案:

答案 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将等于成本文件中的条目。