有些游戲之中會(huì)有掛機(jī),在掛機(jī)的期間,由系統(tǒng)自動(dòng)操控角色重復(fù)完成玩家指定的內(nèi)容。例如挖礦,系統(tǒng)就會(huì)一直重復(fù)發(fā)現(xiàn)礦,挖礦,沒(méi)有礦,停止挖礦這一系類操作。關(guān)于循環(huán)和重復(fù),今天就來(lái)學(xué)習(xí)一下 C# 語(yǔ)言中的循環(huán)語(yǔ)句。
一、while 循環(huán)
首先給出while 循環(huán)的語(yǔ)法格式:
while(condition){
statements;
}
只要 condition
的值判定為 true
,那么程序就會(huì)自動(dòng)重復(fù)執(zhí)行 while
里面的語(yǔ)句;當(dāng) condition
的值判定為 false
,那么 while
就會(huì)停止循環(huán),直接執(zhí)行 while
之后的語(yǔ)句。
int count = 0;
int num = 0;
while(num <= 5){
count += num;
num += 1;
}
Console.WriteLine(count); // 15
二、for/foreach 循環(huán)
1、 for 循環(huán)
格式:
for(init; condition; increment){
statements;
}
for
循環(huán)后面的括號(hào)里面,需要定義三個(gè)內(nèi)容。
init
- 在循環(huán)開(kāi)始后,第一個(gè)執(zhí)行的內(nèi)容,而且執(zhí)行一次。這一步可以聲明并初始化任何循環(huán)控制變量,也可以不在這里寫(xiě)任何語(yǔ)句,但必須要有分號(hào)。condition
- 循環(huán)的判定條件。如果判定結(jié)果為true
,則執(zhí)行下面的statements
;否則,就結(jié)束了循環(huán),執(zhí)行循環(huán)體的下一個(gè)語(yǔ)句。increment
- 當(dāng)執(zhí)行完for
循環(huán)主體后,控制流會(huì)回到increment
語(yǔ)句并執(zhí)行。該語(yǔ)句也可以留空,只需要在條件部分的后面留下分號(hào)即可。
示例:
for(int i=0;i<5;i++){
Console.WriteLine(i);
}
/*
0
1
2
3
4
*/
2、foreach 循環(huán)
C# 是支持 foreach
循環(huán)語(yǔ)句的編程語(yǔ)言。foreach
循環(huán)可以用來(lái)迭代一個(gè)數(shù)組或者一個(gè)集合對(duì)象。例如:
int[] arr={1, 2, 3, 4, 5};
foreach(int elm in arr){
Console.WriteLine(elm);
}
/*
1
2
3
4
5
*/
// 類似于
for(int n=0;n<arr.Length;i++){
Console.WriteLine(arr[i]);
}
相比兩者,顯然用來(lái)迭代數(shù)組或者集合對(duì)象而言,foreach
循環(huán)實(shí)現(xiàn)更為方便;而 for
循環(huán)相對(duì)來(lái)說(shuō),理解起來(lái)比較簡(jiǎn)單。至于怎么用,就看個(gè)人習(xí)慣和愛(ài)好了。
三、do...while 循環(huán)
格式:
do{
statements;
}while(condition);
do..while
和 while
語(yǔ)句有一些相似,但也有些不同。不同在于,while
只要不滿足條件,那么循環(huán)體內(nèi)的語(yǔ)句一次都不會(huì)執(zhí)行;而 do...whle
語(yǔ)句是無(wú)論你條件滿不滿足,都至少會(huì)執(zhí)行一次的。
int num = 10;
do{
num -= 1;
Console.WriteLine(num);
}while(num > 10);
// 9
從上面的程序來(lái)看,10是永遠(yuǎn)不可能比本身自己還大,所以這個(gè)條件判定恒為 false
,在 while
語(yǔ)句中是不會(huì)輸出任何東西;而在 do...while
語(yǔ)句中如結(jié)果可見(jiàn),還是完成一次 do
語(yǔ)句中的程序。
四、嵌套循環(huán)
和判斷語(yǔ)句一樣,循環(huán)語(yǔ)句一樣是可以嵌套的。但循環(huán)語(yǔ)句有以上三類不同類型的循環(huán)語(yǔ)句,它們之間互相也是可以嵌套的。
for(int i=0;i<=5;i++){
while(i<4){
Console.WriteLine(i);
i+=1;
}
}
/*
0
1
2
3
*/
五、無(wú)限循環(huán)
無(wú)限循環(huán)又叫做死循環(huán),意思就是無(wú)休止、無(wú)窮止地循環(huán)下去。而造成無(wú)限循環(huán)的原因,就是因?yàn)檠h(huán)語(yǔ)句中的判斷條件的值恒為 true
,那么該循環(huán)體就會(huì)一直循環(huán)下去。
int num = 0;
while(num < 10){
Console.WriteLine(num);
}
// 無(wú)限打印 0
這個(gè)程序少了 num += 1
,所以 num
值是沒(méi)有改變的,一直都是 0。而且 0 永遠(yuǎn)比 10 小,所以這個(gè)條件就一直成立,結(jié)果就是無(wú)限循環(huán)打印 0.
六、循環(huán)控制語(yǔ)句
1、break
有時(shí)候,并不希望完全循環(huán)結(jié)束,而是獲得某個(gè)期望值,那么就可以結(jié)束這個(gè)循環(huán)語(yǔ)句。而用來(lái)終結(jié)循環(huán)語(yǔ)句,就需要使用到 break
關(guān)鍵字。
int num = 0;
while(num <= 5){
Console.WriteLine(num);
if(num == 3){
break;
}
num += 1;
}
/*
0
1
2
3
*/
可以看到,num 值等于 3 的時(shí)候,循環(huán)就已經(jīng)結(jié)束了。這就是因?yàn)?break
關(guān)鍵字在這起的作用,結(jié)束循環(huán)。
2、continue
另一個(gè)場(chǎng)景中,我們不是要所有的循環(huán)結(jié)果,比如在篩選產(chǎn)品的過(guò)程中,壞的自然就會(huì)被排除在外,而好的就保留下來(lái)。continue
關(guān)鍵字在循環(huán)體中就相當(dāng)于是排除的作用,到了不想要的內(nèi)容的時(shí)候,就自動(dòng)跳過(guò),直接執(zhí)行下一次循環(huán)。
for(int i=0;i<=3;i++){
if(i == 2){
continue;
}
Console.WriteLine(i);
}
/*
0
1
3
*/
從上面這個(gè)程序中可以看到結(jié)果只有 0 1 3,而 2 已經(jīng)被跳過(guò)去,排除在外。依我的理解而言,continue
就相當(dāng)于是篩選器,將滿足條件的內(nèi)容跳過(guò),排除在外,留下的是所需要的內(nèi)容。
七、總結(jié)
以上就是今天關(guān)于 C# 語(yǔ)言中循環(huán)語(yǔ)句的學(xué)習(xí)記錄,下面做一個(gè)簡(jiǎn)單的復(fù)述:
循環(huán)語(yǔ)句的類型:
- while 循環(huán):只要滿足條件,就可以執(zhí)行循環(huán)體中的語(yǔ)句;否則,就不執(zhí)行。
- for/foreach 循環(huán):for 循環(huán)和 while 循環(huán)類似,但 for 循環(huán)可以定義初始值和自增自減的值,當(dāng)然也可以不定義。foreach 循環(huán)在迭代數(shù)組和集合對(duì)象的時(shí)候,更為簡(jiǎn)單便利。
- do...while 循環(huán):無(wú)論滿不滿足條件,do...while 至少會(huì)執(zhí)行一次內(nèi)容。
- 每個(gè)循環(huán)語(yǔ)句互相之間都可以嵌套使用。
無(wú)限循環(huán):即死循環(huán),當(dāng)循環(huán)條件結(jié)果恒為 true
,就會(huì)造成無(wú)限循環(huán)或者死循環(huán)。
循環(huán)控制語(yǔ)句:
- break - 用來(lái)結(jié)束循環(huán)的。
- continue - 用來(lái)跳過(guò)其本次循環(huán),直接進(jìn)行下一次循環(huán)。