2014-10-19 121 views
0

我正在閱讀一本Java書,並且遇到了一個有趣的循環。它看起來像這樣:初始化語句

for(; (j>0) && (tmp < a[j-1]); j--) 

我明白(j>0) && (tmp < a[j-1])是條件檢查和j--是增量。但是,我沒有得到初始化語句的位置。

+0

這是'for('在你的情況下,沒有 – 2014-10-19 06:32:22

+0

可能的[for循環沒有索引聲明]的重複後的第一個(http://stackoverflow.com/questions/8208503/for-loop-without-index-declaration ) – 2014-10-19 06:32:40

+0

如果你還沒有找到這個,你可能會發現這個有點奇怪:'for(;;)' – Voicu 2014-10-19 06:37:22

回答

2

你的例子中沒有初始化語句。這是可選的。

j可能是在循環之前聲明並初始化的。

+0

令人難以置信的快速,+ 1 ... – 2014-10-19 06:31:24

+1

絕對如果op沒有得到一個錯誤 – 2014-10-19 06:32:16

1

通常情況下,您將在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 
} 

這對於瞭解它與這些陳述確實有幫助。

0
for(initialization; condition; increment) 

它們都不是必須聲明for循環。如果需要,可以有一個for循環,如for(;;)。它會編譯沒有任何錯誤。

根據你的問題j已經初始化了一些地方。因此它非常好。