C#基础解析之Ⅲ 【循环结构】
今天繼續(xù)和大家探討C#,今天我們來聊一聊C#中的循環(huán)結(jié)構(gòu)。對于循環(huán)結(jié)構(gòu)我想在所有語言中都會看到的!因為循環(huán)結(jié)構(gòu)是一個又省時又省力的一個好方法!所以大家用的也比較普遍,接下來我們就一起進入循環(huán)結(jié)構(gòu)。
在我們登陸QQ時,如果你的密碼輸入不正確就會一直提示你賬號或者密碼不正確,這個功能就是使用了循環(huán)結(jié)構(gòu),好的!我們還是來看個控制臺程序的例子,我覺得例子是最容易說明問題的方法。
1 class Program2 {
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循環(huán)判斷登陸賬號和密碼是否都正確,有一個不正確就繼續(xù)輸入
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("登陸成功...");//登陸成功,循環(huán)結(jié)束
20 Console.ReadKey();
21 }
22 }
運行結(jié)果:
while循環(huán)結(jié)構(gòu)語法:
while(條件表達式){
代碼塊;
}
?流程圖:
流程圖說明:
while循環(huán)執(zhí)行時,先判斷條件表達式,如果條件表達式結(jié)果為真(true),執(zhí)行while循環(huán)里的代碼(就是登陸的賬號和密碼),如果條件表達式的結(jié)果為假(false),while循環(huán)結(jié)束(登陸成功)。這里在執(zhí)行while循環(huán)之前,大家一定要給條件表達式里的變量賦值,就是先輸入一次賬號和密碼,再做判斷。
下一個do…while循環(huán),對于do…while循環(huán)和while差不多,do…while是先執(zhí)行,后判斷,而while是先判斷,后執(zhí)行。do…while說白了就是先斬后奏的意思!呵呵!下面看個控制臺程序的例子就會明白了:
1 class Program2 {
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 }
運行結(jié)果:
我簡單的解釋一下這個例子,這個例子就相當于你問路,當你問第一個人說不知道后,你就會去問下一個人,直到你問到有人知道路線的為止(也就是回答Y的人)。
我們來看一下do...while循環(huán)的語法吧:
do{
代碼塊;
}while(條件表達式);
流程圖:
流程圖說明:
從程序開始,首先執(zhí)行一次循環(huán)里的代碼塊,然后執(zhí)行while里的條件表達式進行判斷,如果結(jié)果為真(true),繼續(xù)執(zhí)行代碼塊,也就是開始循環(huán),如果為假(false),循環(huán)結(jié)束。
While和do…while都是不確定循環(huán)的次數(shù),while是判斷了之后再去執(zhí)行,而do…while是先執(zhí)行再去判斷,至少執(zhí)行一次。下面我們來看一個已經(jīng)確定循環(huán)次數(shù)的,for循環(huán),
for循環(huán)是用在已經(jīng)知道循環(huán)的次數(shù)來進行循環(huán)的,還是看個控制臺程序:
1 class Program2 {
3 static void Main(string[] args)
4 {
5
6 //我們就拿西游記九九八十一難比喻吧(本人非常鄙視那些翻拍的東西,比如說:新西游記)
7 //循環(huán)輸出第幾難,如果到81難了就結(jié)束循環(huán),num代表第幾難。
8 for (int num = 1; num <= 81; num++)
9 {
10 Console.WriteLine("第幾難{0}難", num);//輸出第幾難
11 }
12 Console.WriteLine("九九八十一難結(jié)束");
13 Console.ReadKey();
14 }
15 }
運行結(jié)果:
這個例子是已經(jīng)確定了循環(huán)次數(shù),在一般我們知道循環(huán)次數(shù)的情況下一般用for循環(huán)。
來看一下for循環(huán)的語法吧!
for(表達式1;表達式2;表達式3){
代碼塊;
}
這個語法中的表達式我簡單的說一下吧,可能剛一看有點暈,這里面的表達式1是賦值語句,是給循環(huán)中的變量賦值的,比如:int num=1;表達式2是條件表達式,可以說是用來判斷的,如果這個判斷結(jié)果為假(false),那么循環(huán)就結(jié)束了,如果為真(true),循環(huán)就繼續(xù),比如:在上面的控制臺程序中的num<=81;表達式3也是賦值語句,就是用來進行循環(huán)中變量的運算,比如:num++;這三個表達式合起來的寫法就是for(int num=1;num<=81;num++)
流程圖:
流程圖說明:
for在循環(huán)時,首先執(zhí)行表達式1,然后執(zhí)行表達式2判斷條件是否正確,如果為真(true),那么就執(zhí)行循環(huán)里的代碼塊,再執(zhí)行表達式3;如果結(jié)果為假(false),循環(huán)就結(jié)束。在這里說一下啊,就是在判斷為真(true)的情況下,執(zhí)行完表達式3后執(zhí)行表達式2再次進行判斷,然后重復以上操作,直到條件表達式判斷為false結(jié)束為止。
下面我們來看兩個特殊的東東。。。break和continue 這兩個是在程序中起到中止和繼續(xù)的操作,這兩個比較好理解!我就不說太多了,寫兩個控制臺程序一看就明白了,
break控制臺程序:
1 class Program2 {
3 static void Main(string[] args)
4 {
5 int count = 0;//先定義變量來保存的登陸次數(shù),初始化為0
6 Console.Write("登錄賬號");
7 string name = Console.ReadLine();
8 Console.Write("登錄密碼");
9 string password = Console.ReadLine();
10 //下面用while循環(huán)來看一下break的作用,我們的目的是當循環(huán)輸入三次密碼之后給出用戶提示
11 while (name != "admin" || password != "123")
12 {
13 count++;//每循環(huán)一次就讓它加一
14 if (count == 3)//如果登陸的次數(shù)是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)//上面中止循環(huán)之后給出提示
26 {
27 Console.WriteLine("對不起!您已經(jīng)連續(xù)輸入錯誤3次!");
28 }
29 else
30 {
31 Console.WriteLine("青蘋果登陸博客園成功");//登錄成功給出提示,循環(huán)結(jié)束
32 }
33 Console.ReadKey();
34 }
35 }
?運行結(jié)果:
下面一個,continue控制臺程序:
1 class Program2 {
3 static void Main(string[] args)
4 {
5 //continue這個我們來用for循環(huán)實現(xiàn),循環(huán)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 //輸出判斷
14 if ( i == 7)
15 {
16 Console.WriteLine("周日休息");
17 }
18 else
19 {
20 Console.WriteLine("星期{0}---上班。。。", i);//循環(huán)輸出星期
21 }
22 }
23 Console.ReadKey();
24 }
25 }
運行結(jié)果:
看明白了吧!好的,我們再來簡單的理解一下break和continue。break是中止循環(huán),它會直接影響到循環(huán)次數(shù),就是說只要break了這個循環(huán)就直接結(jié)束,不帶猶豫的。而continue是停止本次循環(huán),繼續(xù)執(zhí)行下面的循環(huán),不影響循環(huán)的次數(shù),就比如說你每天吃三頓飯吧(正常人的飲食習慣),如果你中午那頓飯continue了,沒有吃!那么你晚上可以再吃,但是如果break了!就以后不能再吃飯了!只有等著餓死了。。。
最后我們來看一下foreach循環(huán),foreach循環(huán)可以說是C#語言里面特有的循環(huán)語句,我們來舉個例子來看看它多特殊:
2 {
3 static void Main(string[] args)
4 {
5 Console.WriteLine("請輸入數(shù)字");
6 string str = Console.ReadLine();
7 //foreach循環(huán)每次從字符串str里面得到一個單字符
8 foreach (char ch in str)
9 {
10 //判斷這個單字符是否為數(shù)字
11 if (Char.IsDigit(ch) == false)//“Char.IsDigit”這個是判斷數(shù)字的,如果為數(shù)字的話返回true,否則返回false,在這里只要知道就可以了!
12 {
13 Console.WriteLine("{0}不是數(shù)字", ch);//輸出結(jié)果
14 break;//break結(jié)束循環(huán)
15 }
16 }
17 Console.WriteLine("判斷完畢");
18 Console.ReadKey();
19 }
20 }
運行結(jié)果:
foreach語法:
foreach(數(shù)據(jù)類型 變量 in 集合或數(shù)組){
代碼塊;
}
這里foreach循環(huán)的語法可能不太好理解,下面我就詳細的說說,foreach循環(huán)的每一次循環(huán)都要從集合或者數(shù)組中(in)按從左向右的順序拿到一個值,這個值得數(shù)據(jù)類型和集合或者數(shù)組的數(shù)據(jù)類型要一致,一般情況下這個值保持在一個變量里。foreach循環(huán)和for循環(huán)有些相似,但是foreach循環(huán)是不固定循環(huán)的次數(shù),而且在上面那個foreach控制臺的例子中我們看到它的循環(huán)次數(shù)是自動控制的。
流程圖:
流程圖說明:
foreach在循環(huán)時,首先賦值,然后在表達式1中進行判斷,如果為真(true)就執(zhí)行代碼塊,再執(zhí)行表達式2,然后進行循環(huán)判斷,當表達式1判斷結(jié)果為假(false)時循環(huán)結(jié)束。
ok!以上就是本次的所有循環(huán),在循環(huán)中我們要注意一個問題,就是死循環(huán),死循環(huán)在程序開發(fā)中應(yīng)該盡量避免,當我們一旦發(fā)現(xiàn)了死循環(huán),就要仔細檢查循環(huán)里控制循環(huán)退出的代碼是否有錯誤。我們還是來看個典型的事例吧:
1 class Program2 {
3 static void Main(string[] args)
4 {
5 int i = 1;
6 while (i < 10)
7 {
8 Console.WriteLine("這是第{0}次循環(huán)", i);
9 //這里是缺少的代碼處
10 }
11 Console.ReadKey();
12 }
13 }
運行結(jié)果:
錯誤點修改:
正確的運行結(jié)果:
?
總結(jié):
1.while循環(huán)結(jié)構(gòu);
2.do...while循環(huán)結(jié)構(gòu);
3.for循環(huán)結(jié)構(gòu);
4.關(guān)鍵字break和continue;
5.foreach循環(huán)結(jié)構(gòu);
6.死循環(huán);
Ok!本次分享就到這里,歡迎大家多多留言討論,這樣我們才可以共同進步。今天就到這里吧!已經(jīng)十二點多了!該睡覺了!最后還是復制內(nèi)句話:此文是本人的個人觀點,如有不完善或者不準確的地方,歡迎高手進行批評,老鳥進行指點。
| 作者:青蘋果 座右銘:不斷的反省自己!然后加以改變! 感興趣的技術(shù):.NET、數(shù)據(jù)庫、JavaScript、C#、ajax、winform、jquery、extjs 本文出處:http://www.cnblogs.com/xinchun/ 本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權(quán)利。 |
轉(zhuǎn)載于:https://www.cnblogs.com/xinchun/archive/2012/02/25/2362067.html
總結(jié)
以上是生活随笔為你收集整理的C#基础解析之Ⅲ 【循环结构】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提高ipad浏览器下大尺寸xml文件解析
- 下一篇: 八部委宰割C类电商 消费者必遭殃