Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个for循环在java中做什么?_Java_Loops_For Loop - Fatal编程技术网

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

这个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循环,我不明白

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
作为其父节点。基本上,它在
目的地
父[目的地]
父[父[目的地]]
。。。直到找到
源节点。