这个for循环在java中做什么?
我在读一些算法的代码,然后它有一个for循环,我不明白这个for循环在java中做什么?,java,loops,for-loop,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问题),但是当我用下面的代码测试代码时,它会给我ArrayIndexOutOfBoundsExce
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循环是做什么的吗 将其重构为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"
}
可能有助于您理解for循环的每个部分代表什么:
for语句的一般形式可以表示为:
for (initialization; termination; increment) {
statement(s)
}
使用此版本的for语句时,请记住:
- 初始化表达式初始化循环;它在循环开始时执行一次
- 当终止表达式的计算结果为false时,循环终止
- 在循环的每次迭代后调用增量表达式;对于这个表达式来说,增加或减少一个值是完全可以接受的
ArrayIndexOutOfBoundsException
,您将在System.out.println(v)之后看到它
打印v
的初始值,v=arr[v]
将尝试将v
设置为arr[8]
(在“增量”步骤中)。但是,Java数组是零索引的,因此在8元素数组中,第八个元素的数组将是7,如果索引大于7(例如8),则会产生ArrayIndexOutOfBoundsException
我认为原始for循环并不意味着在您解释数组时对其进行迭代,因此您应该重新检查原始代码的预期用途和上下文。您得到了一个数组越界异常,因为您从数组中的1开始。从0开始,以7结束,它将被编译。那么您关心的是哪个循环呢?后者很容易被破坏,因为它从
v[8]
开始,但v的索引只从0开始运行。。7
for
循环不限于迭代数组或集合。这里,它用于遍历类似于图的结构,其中parent[i]=j
表示节点i
将节点j
作为其父节点。基本上,它在目的地
,父[目的地]
,父[父[目的地]]
。。。直到找到源节点。