迴圈:
迴圈,可以大量、重複地執行某一段程式碼,並對某些變數進行重複的操作。
常用的迴圈有for迴圈、while迴圈,介紹如下:
(1) for迴圈:
for ( var 變數名稱 = 值; 執行條件; 控制程式碼)
{
內容程式碼
}
兩個小括號( 和 )內可分為三部分:
第一部份是var 變數名稱 = 值;。這是迴圈的初始設定,在for迴圈剛開始時就會執行,且只執行一次。
第二部分是執行條件,乃是迴圈執行的條件(此條件,可當作一個布林代數來看待),每一次迴圈內的內容程式碼要被執行前,這個執行條件就會被檢查一次,若條件成立則繼續執行內容程式碼,若不成立則結束迴圈。
第三部分是控制程式碼,用來控制迴圈執行的次數。每一次迴圈內的內容程式碼被執行完後,控制程式碼就會被執行一次。
※ 範例一,求1+2+3+…+100的總和:
var sum=0;
for (var i=1; i<=100; i++)
{ sum = sum+i; } // sum = sum+i也可以寫成:sum+=i,兩者都是將sum增加i。
document.write(sum);
// 執行後顯示:5050
※ 範例二,求2~100之間的所有質數:
for (var i=2; i<=100; i++)
{
var i_have_factor = false;
for (var j=2; j<i; j++)
{
if (i%j==0)
{i_have_factor =true; } // 若i_have_factor為true,表示i有「除了i自己與1以外的因數」
}
if (!i_have_factor )
{ document.write(i+", "); }
}
// 執行後顯示:2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
(2) 強制中斷、跳過迴圈的執行:
(2-1) 如上所述,一旦執行條件不成立,for迴圈就不會繼續執行。但在某些情況下,程式設計者需要令for迴圈在執行條件不成立之前,就中斷for迴圈的執行。此時可用break關鍵字來強迫for迴圈中斷。譬如,將之前的範例問題改成:
for (var i=2; i<=100; i++)
{
var i_have_factor = false;
for (var j=2; j<i; j++)
{
if (i%j==0)
{i_have_factor =true; break; } //此處加了break
}
if (!i_have_factor )
{ document.write(i+", "); }
}
因為當i_have_factor為true,表示i有「除了i自己與1以外的因數」。加了一個break,表示只要發現一個因數就可以不用繼續執行最內部的迴圈,避免浪費時間。且仍能找出2~100之間的所有質數。
(2-2) 在某些情況下,程式設計者需要令for迴圈跳過某次執行,然後去執行下一次。此時可用關鍵字continue來跳過。比如,將上述的範例改成:
for (var i=2; i<=100; i++)
{
if (i>2 && i%2==0){continue;} //此處加了continue
var i_have_factor = false;
for (var j=2; j<i; j++)
{
if (i%j==0)
{i_have_factor =true; break; }
}
if (!i_have_factor )
{ document.write(i+", "); }
}
因為已知一個數若大於2且又是偶數,則其必不可能為質數。加了一個continue,表示只要i大於2且i又是偶數,就可以判斷i不是質數,直接跳過這一輪的執行,再將i增加1,避免浪費時間。且仍能找出2~100之間的所有質數。
(3) while 迴圈:
while 迴圈跟for 迴圈在執行的邏輯上很類似,只是寫法比較簡單。while 迴圈寫法為:
while (執行條件)
{
內容程式碼
}
和for迴圈一樣,while每執行一次內容程式碼之前,都會檢查執行條件是否成立(該布林代數是否為true),成立就執行,不成立就結束迴圈。以範例來說,上述(1)中的範例一:求1+2+3+…+100的總和,用while迴圈來寫是這樣的:
var sum=0;
var i=1;
while(i<=100)
{
sum=sum+i;
i++;
}
document.write(sum);
// 執行後顯示:5050
其中原本for迴圈內的初始設定var i=1;被移到迴圈之外,而原本的控制程式碼i++被寫到內容程式碼裡了。而執行後的顯示的結果是一樣的。
※ 註:while迴圈也可以使用break和continue來中斷、跳過迴圈的執行。
留言列表