[英]what does this for loop do in java?
我正在閱讀一些算法的代碼,然后有我不明白的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);
之后看到它System.out.println(v);
打印v
的初始值, v = arr[v]
將嘗試將v
設置為arr[8]
(在“增量”步驟中)。 Java數組的索引為零,因此,在8個元素的數組中,第八個元素的數組將為7,而更大的索引(例如8)將導致ArrayIndexOutOfBoundsException
。
我認為原始的for循環並不意味着要在解釋數組時對其進行迭代,因此您應該重新檢查原始代碼的預期用途和上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.