今天繼續和大家探討C#,今天我們來聊一聊C#中的循環結構。對於循環結構我想在所有語言中都會看到的!因為循環結構是一個又省時又省力的一個好方法!所以大家用的也比較普遍,接下來我們就一起進入循環結構。
在我們登陸QQ時,如果你的密碼輸入不正確就會一直提示你賬號或者密碼不正確,這個功能就是使用了循環結構,好的!我們還是來看個控制台程序的例子,我覺得例子是最容易說明問題的方法。
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Console.Write("登陸賬號");
6 string name = Console.ReadLine();//接收登陸賬號
7 Console.Write("登陸密碼");
8 string password = Console.ReadLine();//接收登陸密碼
9 //while循環判斷登陸賬號和密碼是否都正確,有一個不正確就繼續輸入
10 while (name != "admin" || password != "123")
11 {
12 //如果登陸不正確就給出提示
13 Console.WriteLine("登陸賬號或者密碼不正確,請重新輸入");
14 Console.Write("登陸賬號");
15 name = Console.ReadLine();//再次接收賬號
16 Console.Write("登陸密碼");
17 password = Console.ReadLine();//再次接收密碼
18 }
19 Console.WriteLine("登陸成功...");//登陸成功,循環結束
20 Console.ReadKey();
21 }
22 }
運行結果:
while循環結構語法:
while(條件表達式)
{
代碼塊;
}
流程圖:
流程圖說明:
while循環執行時,先判斷條件表達式,如果條件表達式結果為真(true),執行while循環裡的代碼(就是登陸的賬號和密碼),如果條件表達式的結果為假(false),while循環結束(登陸成功)。這裡在執行while循環之前,大家一定要給條件表達式裡的變量賦值,就是先輸入一次賬號和密碼,再做判斷。
下一個do…while循環,對於do…while循環和while差不多,do…while是先執行,後判斷,而while是先判斷,後執行。do…while說白了就是先斬後奏的意思!呵呵!下面看個控制台程序的例子就會明白了:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5
6 string answer;//先定義一個變量,用來保存
7 do
8 {
9 //輸出提示並詢問
10 Console.WriteLine("青蘋果住在博客園");
11 Console.WriteLine("你是否知道青蘋果(Y/N)");
12 answer = Console.ReadLine();//接收答案
13 } while (answer != "Y" && answer != "y");
14 Console.WriteLine("我知道青蘋果");
15 Console.ReadKey();
16 }
17 }
運行結果:
我簡單的解釋一下這個例子,這個例子就相當於你問路,當你問第一個人說不知道後,你就會去問下一個人,直到你問到有人知道路線的為止(也就是回答Y的人)。
我們來看一下do...while循環的語法吧:
do
{
代碼塊;
}while(條件表達式);
流程圖:
流程圖說明:
從程序開始,首先執行一次循環裡的代碼塊,然後執行while裡的條件表達式進行判斷,如果結果為真(true),繼續執行代碼塊,也就是開始循環,如果為假(false),循環結束。
While和do…while都是不確定循環的次數,while是判斷了之後再去執行,而do…while是先執行再去判斷,至少執行一次。下面我們來看一個已經確定循環次數的,for循環,
for循環是用在已經知道循環的次數來進行循環的,還是看個控制台程序:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5
6 //我們就拿西游記九九八十一難比喻吧(本人非常鄙視那些翻拍的東西,比如說:新西游記)
7 //循環輸出第幾難,如果到81難了就結束循環,num代表第幾難。
8 for (int num = 1; num <= 81; num++)
9 {
10 Console.WriteLine("第幾難{0}難", num);//輸出第幾難
11 }
12 Console.WriteLine("九九八十一難結束");
13 Console.ReadKey();
14 }
15 }
運行結果:
這個例子是已經確定了循環次數,在一般我們知道循環次數的情況下一般用for循環。
來看一下for循環的語法吧!
for(表達式1;表達式2;表達式3)
{
代碼塊;
}
這個語法中的表達式我簡單的說一下吧,可能剛一看有點暈,這裡面的表達式1是賦值語句,是給循環中的變量賦值的,比如:int num=1;表達式2是條件表達式,可以說是用來判斷的,如果這個判斷結果為假(false),那麼循環就結束了,如果為真(true),循環就繼續,比如:在上面的控制台程序中的num<=81;表達式3也是賦值語句,就是用來進行循環中變量的運算,比如:num++;這三個表達式合起來的寫法就是for(int num=1;num<=81;num++)
流程圖:
流程圖說明:
for在循環時,首先執行表達式1,然後執行表達式2判斷條件是否正確,如果為真(true),那麼就執行循環裡的代碼塊,再執行表達式3;如果結果為假(false),循環就結束。在這裡說一下啊,就是在判斷為真(true)的情況下,執行完表達式3後執行表達式2再次進行判斷,然後重復以上操作,直到條件表達式判斷為false結束為止。
下面我們來看兩個特殊的東東。。。break和continue 這兩個是在程序中起到中止和繼續的操作,這兩個比較好理解!我就不說太多了,寫兩個控制台程序一看就明白了,
break控制台程序:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int count = 0;//先定義變量來保存的登陸次數,初始化為0
6 Console.Write("登錄賬號");
7 string name = Console.ReadLine();
8 Console.Write("登錄密碼");
9 string password = Console.ReadLine();
10 //下面用while循環來看一下break的作用,我們的目的是當循環輸入三次密碼之後給出用戶提示
11 while (name != "admin" || password != "123")
12 {
13 count++;//每循環一次就讓它加一
14 if (count == 3)//如果登陸的次數是3的時候,就中止它
15 {
16 break;// (^o^)注意啦!break在這裡呢 !
17 }
18 //如果輸入不正確,讓用戶重新輸入
19 Console.WriteLine("密碼或者賬號不正確,請重新輸入!");
20 Console.Write("登錄賬號");
21 name = Console.ReadLine();
22 Console.Write("登錄密碼");
23 password = Console.ReadLine();
24 }
25 if (count == 3)//上面中止循環之後給出提示
26 {
27 Console.WriteLine("對不起!您已經連續輸入錯誤3次!");
28 }
29 else
30 {
31 Console.WriteLine("青蘋果登陸博客園成功");//登錄成功給出提示,循環結束
32 }
33 Console.ReadKey();
34 }
35 }
運行結果:
下面一個,continue控制台程序:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 //continue這個我們來用for循環實現,循環7次,代表一個星期,
6 for (int i = 1; i <= 7; i++)
7 {
8 if (i == 3)//判斷為星期六的時候休息
9 {
10 Console.WriteLine("星期3---請假");
11 continue;// (^0^)注意啦!continue在這裡呢!
12 }
13 //輸出判斷www.2cto.com
14 if ( i == 7)
15 {
16 Console.WriteLine("周日休息");
17 }
18 else
19 {
20 Console.WriteLine("星期{0}---上班。。。", i);//循環輸出星期
21 }
22 }
23 Console.ReadKey();
24 }
25 }
運行結果:
看明白了吧!好的,我們再來簡單的理解一下break和continue。break是中止循環,它會直接影響到循環次數,就是說只要break了這個循環就直接結束,不帶猶豫的。而continue是停止本次循環,繼續執行下面的循環,不影響循環的次數,就比如說你每天吃三頓飯吧(正常人的飲食習慣),如果你中午那頓飯continue了,沒有吃!那麼你晚上可以再吃,但是如果break了!就以後不能再吃飯了!只有等著餓死了。。。
最後我們來看一下foreach循環,foreach循環可以說是C#語言裡面特有的循環語句,我們來舉個例子來看看它多特殊:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 Console.WriteLine("請輸入數字");
6 string str = Console.ReadLine();
7 //foreach循環每次從字符串str裡面得到一個單字符
8 foreach (char ch in str)
9 {
10 //判斷這個單字符是否為數字
11 if (Char.IsDigit(ch) == false)//“Char.IsDigit”這個是判斷數字的,如果為數字的話返回true,否則返回false,在這裡只要知道就可以了!
12 {
13 Console.WriteLine("{0}不是數字", ch);//輸出結果
14 break;//break結束循環
15 }
16 }
17 Console.WriteLine("判斷完畢");
18 Console.ReadKey();
19 }
20 }
運行結果:
foreach語法:
foreach(數據類型 變量 in 集合或數組)
{
代碼塊;
}
這裡foreach循環的語法可能不太好理解,下面我就詳細的說說,foreach循環的每一次循環都要從集合或者數組中(in)按從左向右的順序拿到一個值,這個值得數據類型和集合或者數組的數據類型要一致,一般情況下這個值保持在一個變量裡。foreach循環和for循環有些相似,但是foreach循環是不固定循環的次數,而且在上面那個foreach控制台的例子中我們看到它的循環次數是自動控制的。
流程圖:
流程圖說明:
foreach在循環時,首先賦值,然後在表達式1中進行判斷,如果為真(true)就執行代碼塊,再執行表達式2,然後進行循環判斷,當表達式1判斷結果為假(false)時循環結束。
ok!以上就是本次的所有循環,在循環中我們要注意一個問題,就是死循環,死循環在程序開發中應該盡量避免,當我們一旦發現了死循環,就要仔細檢查循環裡控制循環退出的代碼是否有錯誤。我們還是來看個典型的事例吧:
1 class Program
2 {
3 static void Main(string[] args)
4 {
5 int i = 1;
6 while (i < 10)
7 {
8 Console.WriteLine("這是第{0}次循環", i);
9 //這裡是缺少的代碼處
10 }
11 Console.ReadKey();
12 }
13 }
運行結果:
錯誤點修改:
正確的運行結果:
總結:
1.while循環結構;
2.do...while循環結構;
3.for循環結構;
4.關鍵字break和continue;
5.foreach循環結構;
6.死循環;
Ok!本次分享就到這裡,歡迎大家多多留言討論,這樣我們才可以共同進步。今天就到這裡吧!已經十二點多了!該睡覺了!最後還是復制內句話:此文是本人的個人觀點,如有不完善或者不准確的地方,歡迎高手進行批評,老鳥進行指點。
摘自 青蘋果