2015-05-16 2 views
0

Я получил 2 файла (узлы и стоимость) в следующем форматедля цикла Java не работает

Node файл как (Startnode, endnode)

A B 
A C 

Стоимость файла, как (узел, стоимость)

A 6 
B 5 
C 8 

Если startnode задается пользователем является «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); 

Я не знаю, где мой цикл неисправен, может ли один быть в состоянии дать мне знать, где я неправильно? Должен ли я использовать расширенный цикл?

+1

Мы понятия не имеем, как вы определили функции, которые вы используете в этом цикле. –

+0

Можете ли вы опубликовать методы 'getStartNode()', 'getEndNode()', 'getCost()'? а также где вы назначаете переменные 'startnode',' nodes' и 'cost' – CrApHeR

ответ

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 будет равно записям в файле стоимости.

Смежные вопросы