天天看點

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

因為for循環有很多變化,是以for循環是java語言中用處最多的語句。一個最常見的用法是有多個循環控制變量。在使用多個循環控制變量時,每個表達式的初始化表達式和疊代表達式用逗号分隔。下面是一個簡單的例子:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

程式輸出如下所示:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

注意,逗号将兩個初始化表達式和疊代表達式分開的方式。當循環開始時,在循環的初始化部分初始化變量i和變量j。每次循環開始時,遞增變量i,遞減變量j。當i大于等于j時結束循環。理論上,可以有任意數量的循環控制變量,但實際上,兩三個循環控制變量就會讓for循環很難看。

for循環的另一種常見變化與循環控制條件的本質有關。這種情況不需要引入循環控制變量。條件語句可以是任意有效的boolean表達式。在下面的例子中,循環一直執行,直到使用者在鍵盤敲擊字母s:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

通過對循環定義的部分片段留白,可以為for循環創造許多有趣的變化。在java中,for循環的初始化部分、條件部分或疊代部分中的任何一個或全部都可能為空。例如,考慮下面程式:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

這裡,for循環的疊代表達式為空。但是,循環控制變量i在循環體内部遞增。這意味着,每次循環時隻檢查變量i是否等于10,不再進行其他操作。但是,由于變量i在循環主體内部增加,是以循環正常運作,顯示以下輸出:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

在下一個例子中,for循環的初始化部分也移除了。

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

在這個版本中,變量i在循環開始前初始化,而不是作為for循環的一部分。一般情況下,會在for的内部初始化循環控制變量。通常,隻有在初始值不是由for語句内部的過程得到的情況下,才将初始化語句放在循環外面。

通過将for循環的條件表達式留白,可以建立無限循環(infinite loop)。這是一個永不終止的循環。例如,很多java程式員用下面的代碼段建立無限循環:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

循環将永遠運作下去。盡管一些程式設計任務(如作業系統的指令程序)需要無限循環,但是絕大多數的“無限循環”僅僅是包括特殊終止語句的循環。在本章末将會看到如何停止這類循環。(提示:使用break語句終止循環。)

在java中,for循環(或其他循環)的循環體可以留白。這是因為,從文法上看,空語句(null statement)是有效的。沒有循環體的循環經常很有用。例如,下面程式就用了一個沒有循環體的循環來計算1~5之間整數的和:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況
《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

注意,累加過程在for循環内執行,不需要循環體。請特别關注疊代表達式:

《Java 7程式設計入門經典》一3.8 for循環中的一些特殊情況

不要畏懼這樣的語句。它們在專業的java程式中經常遇到。如果将它們分為多個部分,就很容易了解了。簡言之,這個語句就是将sum的結果加上i再賦給sum,然後将變量i遞增1。是以,該語句與以下語句相同: