本節課將介紹如何使用C#控制語句中的循環語句,本課目的如下:
1.學會"while"循環的用法。
2.學會"do" 循環的用法。
3.學會"for" 循環的用法。
4.學會foreach循環的用法。
5.進一步了解"break"語句的用法。
6.如何使用"continue"語句。
在C#中,使用"goto"語句並不是一個最佳的建立循環的方法。本節課將介紹建立循環的常用方法。
第一個要介紹的語句是while循環語句
1.清單 4-1. While循環:While loop.cs
using System;
class Whileloop {
public static void Main() {
int myInt = 0;
while (myInt < 10) {
Console.Write("{0} ", myInt);
myInt++;
}
Console.WriteLine();
}
}
說明
1.清單 4-1演示了一個簡單的while 循環。
以關鍵字"while"開始,後面是個布爾表達式。所有的控制語句都使用了布爾表達式。這就意味著表達式必須計算出true 或者false值。本例中,我們將檢查myInt變量,看看它是否小於10。 因為myInt已經初始化為0,第一次計算時,該布爾表達式將返回true值。一旦布爾表達式的值為true,將執行該布爾表達式後面塊中的語句。
2.在while塊中,我們把數字和空格輸出到控制台中,之後,對 myInt進行加1運算。一旦執行了while塊中的語句之後,再次計算布爾表達式的值,這種情況將一直循環下去,直到該布爾表達式的值為false為止。 一旦布爾表達式的值為false, 程序將從while 塊之後的第一條語句開始執行。在本例中,我們把數字0到9輸出到控制台中,之後退出while塊,再輸出一個新行到控制台。
同 "while"循環類似的是"do" 循環語句。
2.清單 4-2. Do 循環: Do loop.cs
using System;
class Doloop {
public static void Main() {
string myChoice;
do {
// Print A Menu
Console.WriteLine("My Address Book/n");
Console.WriteLine("A - Add New Address");
Console.WriteLine("D - Delete Address");
Console.WriteLine("M - Modify Address");
Console.WriteLine("V - View Addresses");
Console.WriteLine("Q - Quit/n");
Console.WriteLine("Choice (A,D,M,V,or Q): ");
// Retrieve the user's choice
myChoice = Console.ReadLine();
// Make a decision based on the user's choice
switch(myChoice) {
case "A":
case "a":
Console.WriteLine("You wish to add an address.");
break;
case "D":
case "d":
Console.WriteLine("You wish to delete an address.");
break;
case "M":
case "m":
Console.WriteLine("You wish to modify an address.");
break;
case "V":
case "v":
Console.WriteLine("You wish to view the address list.");
break;
case "Q":
case "q":
Console.WriteLine("Bye.");
break;
default:
Console.WriteLine("{0} is not a valid choice", myChoice);
}
// Pause to allow the user to see the results
Console.Write("Press any key to continue...");
Console.ReadLine();
Console.WriteLine();
} while (myChoice != "Q" && myChoice != "q"); // Keep going until the user wants to quit
}
}
說明
1.清單 4-2 演示了"do"循環的例子。 "do" 循環的格式是: do { <語句> } while (<布爾表達式>);其中的語句可以是任何合法的C#語句,布爾表達式同以前的規定一樣,其返回值要麼為true,要麼為false。
2.如果你打算輸出清單4-2 中的信息或者菜單,之後再讀取用戶的輸入,那麼就使用"do" 格式的循環而不要使用"while" 格式的循環語句。因為在本例中,布爾表達式的值是在循環結束處進行計算的, "do" 循環可以保證:循環體中的語句至少執行一次。與此相對應的是:"while" 循環一開始時,計算布爾表達式的值,"while" 循環不能保證循環體中的語句能夠至少執行一次。
3.讓我們來回顧一下清單 4-2中的內容。
在Main()方法中,我們定義了變量 "myChoice"為字符串類型。之後,輸出一些信息到控制台,即輸出一個可讓用戶進行選擇的菜單。我們必須要得到用戶的輸入,即Console.ReadLine()方法所返回的值,該值存放在myChoice變量中。我們必須先得到用戶的輸入,之後再處理。要完成這件事,一個有效的方法是就使用 "switch"語句。注意到:為了獲得同樣的功能,我們既匹配了小寫字母,也匹配了大寫字母。另外一點是:我們使用了 "default:" case,這是個良好的編程作風。
3.清單 4-3. For 循環: For loop.cs
using System;
class Forloop {
public static void Main() {
for (int i=0; i < 20; i++) {
if (i == 10)
break;
if (i % 2 == 0)
continue;
Console.Write("{0} ", i);
}
Console.WriteLine();
}
}
說明
1.清單 4-3 演示了"for" 循環的用法。
當你能夠精確地知道循環的次數時, For 循環語句就派上了用場。本程序同清單 4-1中"while" 循環程序的運行結果一樣。 "for" 循環中,括號中內容由三個由分號隔開的部分: "(<初始化表>; <布爾表達式>; <post-loop 動作表>)"組成
2.初始化表是個由逗號隔開的表達式,在"for" 循環的整個周期中,這些表達式僅僅計算一次。計算是在一開始進行的,並且在循環語句的執行之前進行。正如在清單 4-3所見,通常初始化表是先初始化一個作為計數器的整型變量。
3.一旦進行初始化後, "for" 循環就進入第二部分:布爾表達式的計算。 這裡的布爾表達式可以寫得很復雜,但是結果只能是true或者false。布爾表達式通常用來驗證計數器變量的狀態。
4.一旦布爾表達式的值為true時,就會執行"for" 循環大括號中的語句。通常情況下,這些語句從左大括號開始,不中斷地一直執行到右大括號。但在清單4-3中,有幾個例外,幾個"if"語句改變了程序的流程。
第一個"if"語句檢查"i"是否等於10,這裡使用了"break"語句,可在此處跳出循環,轉入 "for"塊後面的第一條語句的執行。
第二條"if"語句使用了求余運算符,看看"i"是否能夠被2整除,如果余數等於0,就執行 "continue"語句。控制將跳過循環體中余下的語句,轉入下一輪新的循環。你需要在塊中正確地組織好語句,一旦滿足有關條件,就執行相應的語句。
5.一旦程序流程遇到continue語句,或者遇到塊的結尾處的右括號, 就轉入"for" 循環括號中的第三項:post-loop 動作表,該表由逗號隔開,在"for"塊中的語句都執行完畢之後,就執行該動作表中的動作。 清單 4-3中的 post-loop 動作表中的動作很典型:計數器加1。一旦動作表執行完畢,流程就轉到對布爾表達式值進行判別。循環將繼續進行下去,直到布爾表達式的值為true。當布爾表達式的值為false,控制流程就轉到 "for"塊之後的第一條語句。
4.清單 4-4. The ForEach 循環: ForEachloop.cs
using System;
class ForEachloop {
public static void Main() {
string[] names = {"Cheryl", "Joe", "Matt", "Robert"};
foreach (string person in names) {
Console.WriteLine("{0} ", person);
}
}
}
說明
1."foreach" 循環列舉出集合中所有的元素。
清單 4-4所使用的數組類型,就是這樣的一個集合。(在"System.Collections"也可以由其他的數據類型作集合。). 在Main()方法中,我們所做的第一件事是:定義由四個字符串組成的數組names。
2."foreach"括號中的表達式是由關鍵字in隔開的兩個項組成。in右邊的項是集合名,in左邊的項是變量名,用來存放該集合中的每個元素。
該循環的運行過程如下:每一次循環時,從集合中取出一個新的元素值,放到只讀變量中去,括號中的整個表達式返回值為true, "foreach"塊中的語句就能夠執行。一旦集合中的元素都已經被訪問到,整個表達式的值為false,控制流程就轉入到 "foreach" 塊後面的第一條可執行語句。
3.在清單 4-4的例子中,我們使用了字符串變量person用來存放names數組的每個元素,並且使用Console.WriteLine()方法輸出person 變量的值。
小結
到現在為止,你已經了解了"while","do","for"和"foreach" 循環語句的用法。最後你也學習了如何設置有關條件,來改變循環體塊中的語句的流程。