天天看點

Java核心技術卷I基礎知識3.8.4 确定循環

<b>3.8.4 确定循環</b>

for循環語句是支援疊代的一種通用結構,利用每次疊代之後更新的計數器或類似的變量來控制疊代次數。如圖3-12所示,下面的程式将數字1~10輸出到螢幕上。

   

     圖3-11 do/while語句的流程圖        ???圖3-12 for語句的流程圖

for語句的第1部分通常用于對計數器初始化;第2部分給出每次新一輪循環執行前要檢測的循環條件;第3部分訓示如何更新計數器。

與c++一樣,盡管java允許在for循環的各個部分放置任何表達式,但有一條不成文的規則:for語句的3個部分應該對同一個計數器變量進行初始化、檢測和更新。若不遵守這一規則,編寫的循環常常晦澀難懂。

即使遵守了這條規則,也還有可能出現很多問題。例如,下面這個倒計數的循環:

      警告:在循環中,檢測兩個浮點數是否相等需要格外小心。下面的for循環

可能永遠不會結束。由于舍入的誤差,最終可能得不到精确值。例如,在上面的循環中,因為0.1無法精确地用二進制表示,是以,x将從9.999 999 999 999 98跳到10.099 999 999 999 98。

當在for語句的第1部分中聲明了一個變量之後,這個變量的作用域就為for循環的整個循環體。

特别指出,如果在for語句内部定義一個變量,這個變量就不能在循環體之外使用。是以,如果希望在for循環體之外使用循環計數器的最終值,就要確定這個變量在循環語句的前面且在外部聲明!

另一方面,可以在各自獨立的不同for循環中定義同名的變量:

for循環語句隻不過是while循環的一種簡化形式。例如,

可以重寫為:

程式清單3-5給出了一個應用for循環的典型示例。這個程式用來計算抽獎中獎的機率。例如,如果必須從1~50之間的數字中取6個數字來抽獎,那麼會有(50×49×48×47×46×45)/(1×2×3×4×5×6)種可能的結果,是以中獎的幾率是1/15 890 700。祝你好運!

程式清單3-5 lotteryodds/lotteryodds.java

一般情況下,如果從n個數字中抽取k個數字,就可以使用下列公式得到結果。

下面的for循環語句計算了上面這個公式的值:

      注釋:3.10.1節将會介紹“通用for循環”(又稱為for each循環),這是java se 5.0新增加的一種循環結構。