簡體   English   中英

這個for循環在Java中做什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM