【问题标题】:for-loop java not workingfor循环java不工作
【发布时间】:2015-05-16 02:03:59
【问题描述】:

我得到了以下格式的 2 个文件(节点和成本)

节点文件为(Startnode, endnode)

A B
A C

成本文件为(节点,成本)

A 6
B 5
C 8

如果用户指定的起始节点是'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 循环吗?

【问题讨论】:

  • 我们不知道你是如何定义你在这个 for 循环中使用的函数的..
  • 你能把getStartNode()getEndNode()getCost()的方法贴出来吗?还有你在哪里分配startnodenodescost变量

标签: java if-statement for-loop


【解决方案1】:

您不应该对循环使用相同的索引变量。试试这个:

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

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 2015-04-08
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多