这个for循环在java中做了什么?

时间:2014-10-06 15:52:12

标签: java loops for-loop

我正在读一些算法的代码,然后它有这个for循环,我不明白,

for (v = destination; v != source; v = parent[v])
{
    u = parent[v];
    residualGraph[u][v] -= pathFlow;
    residualGraph[v][u] += pathFlow;
}

它与我见过的常规for循环不同(抱歉noob问题),但是当我用下面的代码测试代码时,它给了我ArrayIndexOutOfBoundsException

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
for (int v = 8; v != 1; v = arr[v])
{
    System.out.println(v);
}

有人可以解释这个for循环的作用吗?

2 个答案:

答案 0 :(得分:1)

将它重构为while循环,可能会让你更容易理解:

v = destination; //for loop initialization
while (v != source){ //for loop termination condition

  //for loop body
  u = parent[v];
  residualGraph[u][v] -= pathFlow;
  residualGraph[v][u] += pathFlow;

  v = parent[v]; //for loop "increment"
}

答案 1 :(得分:1)

This tutorial可能会帮助您了解for循环的每个部分代表什么:

  

for语句的一般形式可表示如下:

for (initialization; termination; increment) {
    statement(s)
} 
     

使用此版本的for语句时,请记住:

     
      
  • 初始化表达式初始化循环;当循环开始时,它被执行一次。
  •   
  • 当终止表达式的计算结果为false时,循环终止。
  •   
  • 每次迭代循环后调用increment表达式;这个表达式增加或减少一个值是完全可以接受的。
  •   

对于ArrayIndexOutOfBoundsException,您会看到在System.out.println(v);打印v的初始值后,v = arr[v]会尝试将v设置为{ {1}}(在“增量”步骤中)。但是,Java数组是零索引的,因此在8个元素的数组中,第8个元素的数组将为7,任何更大的索引(例如8)将导致arr[8]

我不认为原始的for循环意味着在你解释它时迭代一个数组,所以你应该重新检查原始代码的预期用途和上下文。