2012年3月11日星期日

TJS教學(補充篇)---loop,迴圈

其實我還是不太理解迴圈的結構,可不可以再講解一下?>( ゚ω゚ s)

(k ゚∀゚)<嗯,那麼我從頭開始解釋迴圈,迴圈是一種很常見的流程控制,意指是一段在程式中只出現一次,但可能會連續執行多次的程式碼。

這個我理解,但我還是不知道基本的迴圈該如何寫?>( ゚ω゚ s)

(k ゚∀゚)<雖然迴圈的模樣因情況而異,但一般來說,一個常見的迴圈可以分為四個部分,分別是初始化、條件式、迴圈本體和更新這四個部分,初始化是指變數進行初始化,這變數通常是與條件式有關,而條件式是決定迴圈是否繼續執行,當條件式成立時,就將會執行迴圈本體,當執行完迴圈本體,我們就會更新條件式的變數,之後再檢查條件式是否成立。

(k ゚∀゚)<我們看看以下的範例。

var count=1;
var message="";
while(count<=10){
    message+=count+" ";
    count++;
}
System.inform(message);

(k ゚∀゚)<這是上一次的範例,這個迴圈其實有以上談及到的四個部分,在執行迴圈之前,我們先將相關的變數進行初始化,就像以下紅字的部分。

var count=1;
var message="";
while(count<=10){
    message+=count+" ";
    count++;
}
System.inform(message);

(k ゚∀゚)<之後迴圈會利用條件式來決定是否繼續執行,這亦是逃脫迴圈的位置,因為吉里吉里會在這裡決定是否離開迴圈。以下紅字的部分是相關的程式碼。

var count=1;
var message="";
while(count<=10){
    message+=count+" ";
    count++;
}
System.inform(message);

(k ゚∀゚)<當條件式成立時,就將會執行迴圈本體,也就是我們真正想重複執行的部分,迴圈本體程式碼的行數可以很多,取決於我們寫的是什麼,以下紅字的部分是相關的程式碼。

var count=1;
var message="";
while(count<=10){
    message+=count+" ";
    count++;
}
System.inform(message);

(k ゚∀゚)<當執行完迴圈本體之後,我們就會更新條件式的變數,之後再檢查條件式是否成立。

我們是不是一定要更新?>( ゚ω゚ s)

(k ゚∀゚)<若果我們不進行更新的話,條件式的結果就不會改變,令條件式變成無窮迴圈。

(k ゚∀゚)<以下紅字的部分是相關的程式碼。

var count=1;
var message="";
while(count<=10){
    message+=count+" ";
    count++;
}
System.inform(message);

(k ゚∀゚)<以上就是迴圈的常見結構,大部分迴圈都是這樣的結構。

(k ゚∀゚)<有時候,我們亦會根據迴圈停止的條件來分類。

(k ゚∀゚)<第一種是counter-controlled loop(計數控制迴圈),這種迴圈有一個計數器(counter),這個計數器是用來記錄迴圈執行的次數,我們亦可確實地預知迴圈執行的次數,例如上述的範例就是counter-controlled loop,變數count則是計數器,我們亦可預知迴圈會執行10次(由1至10)。

原來如此,的確很容易看出迴圈會執行多少次。>( ゚ω゚ s)

(k ゚∀゚)<第二種是sentinel-controlled loop,當變數是個特殊的值,迴圈就會停止,這個值稱為sentinel value,通常我們並不知道迴圈何時停止,例如計算平均數,我們不斷輸入一些正整數,直到輸入-1為止,我們無法得知要輸入多少個正整數,所以利用一個沒有使用到的值來決定是否停止。

(k ゚∀゚)<另外,這種利用條件式來決定是否繼續的迴圈,我們亦稱之為condition-controlled loop(條件控制迴圈)。

(k ゚∀゚)<今次先介紹到這裡,下次再見。

沒有留言:

發佈留言