我正在閱讀一本Java書,並且遇到了一個有趣的循環。它看起來像這樣:初始化語句
for(; (j>0) && (tmp < a[j-1]); j--)
我明白(j>0) && (tmp < a[j-1])
是條件檢查和j--
是增量。但是,我沒有得到初始化語句的位置。
我正在閱讀一本Java書,並且遇到了一個有趣的循環。它看起來像這樣:初始化語句
for(; (j>0) && (tmp < a[j-1]); j--)
我明白(j>0) && (tmp < a[j-1])
是條件檢查和j--
是增量。但是,我沒有得到初始化語句的位置。
你的例子中沒有初始化語句。這是可選的。
j
可能是在循環之前聲明並初始化的。
令人難以置信的快速,+ 1 ... – 2014-10-19 06:31:24
絕對如果op沒有得到一個錯誤 – 2014-10-19 06:32:16
通常情況下,您將在for循環中的第一個語句中初始化j(在此處爲空),因爲它是循環索引,通常只在循環中使用。此外,Java for循環的標準語法是for(initialization; termination condition; increment)
,但該語言只強制執行有三個語句(中間語句爲布爾表達式),所以您可以有三個空語句for(;;)
,它會創建一個無限循環,或者可以將一些語句在那裏的其他語句(除了期望布爾表達式的中間表達式),如for(System.out.println("I was supposed to initialize here"); false && true; logger.log("Nope."))
。當然,你不應該那樣做,但它是合法的。
注:如果落實到位,第三語句,以及像變量聲明有些語句是非法的,因爲它是在每次迭代結束時執行(見this更多關於法律的for循環語法)
我這樣想的for循環爲while循環的一種常見形式,要循環多次的縮寫:
int i= 0; // Initialization
while (i< max){ // termination
// Do stuff
i++; // increment
}
這對於瞭解它與這些陳述確實有幫助。
for(initialization; condition; increment)
它們都不是必須聲明for循環。如果需要,可以有一個for循環,如for(;;)
。它會編譯沒有任何錯誤。
根據你的問題j已經初始化了一些地方。因此它非常好。
這是'for('在你的情況下,沒有 – 2014-10-19 06:32:22
可能的[for循環沒有索引聲明]的重複後的第一個(http://stackoverflow.com/questions/8208503/for-loop-without-index-declaration ) – 2014-10-19 06:32:40
如果你還沒有找到這個,你可能會發現這個有點奇怪:'for(;;)' – Voicu 2014-10-19 06:37:22