While,若不曉得這次的迴圈會跑幾次,就是 While 出場的時候了。
雖然這麼說,但 while 還是能正常的處理像上面 for 使用。
只是 for 條件判斷式裡必須明確地給出起始值與終值,所以若有不能在一開始就明確知道的話,就必須使用 while 了。
不免俗,來個例子吧!
while(true) {
val random = Math.random() * 100
val randomLong = Math.round(random)
if (random > 50) break
println(randomLong)
}
這個例子中,會不斷的產生 0~99 的變數,直到有一變數大於 50 ,即會終止該迴圈,那在終止前,我們無法得知該迴圈次數,在這種情境之下用 for 就不太適合了!
Do-While,和 while 差不多,但差異是在進行條件判斷前,會先執行一次程式碼的部分,再做條件判斷,判斷為 true 後,再繼續執行。
以同樣的例子來做比較看看!
do{
val random = Math.random() * 100
val randomLong = Math.round(random)
println(randomLong)
} while(randomLong < 50)
看起來程式碼都沒有改變,只是順序變了,那執行起來有什麼差異呢?
do-while
//10 29 31 39 55
do-while 可以看到最後一個大於 50 ,但還是有印出來,因為程式碼先執行了,之後才做條件判斷才跳出迴圈。
while
//39 25 8 36 9 12 42
while 的話,就完全看不到大於 50 的數字,因為在取得隨機數字時就會做條件判斷,一大於 50 就會跳出迴圈,不會印出該數字。