- Objective-C和Sprite Kit游戲開發(fā)從入門到精通
- 曹化宇
- 969字
- 2021-01-07 18:57:41
3.4 循環(huán)語句
計(jì)算機(jī)最大的特點(diǎn)是什么?就是可以根據(jù)一定的條件自動(dòng)完成工作,而且快速、高效、不會(huì)犯錯(cuò)(除非代碼有問題)。
循環(huán)語句就是能夠根據(jù)一定的條件重復(fù)執(zhí)行一系列任務(wù)的語句結(jié)構(gòu)。在Objective-C中,常用的循環(huán)語句包括for、while和do-while。此外,在循環(huán)語句中,還可以使用break和continue等語句來控制循環(huán)語句的執(zhí)行,下面詳細(xì)討論。
■3.4.1 for語句結(jié)構(gòu)
for語句的應(yīng)用格式如下:
for (<表達(dá)式1>; <表達(dá)式2>; <表達(dá)式3>) { <語句塊> }
其中:
? <表達(dá)式1>用于定義循環(huán)控制變量。
? <表達(dá)式2>指定循環(huán)執(zhí)行的條件,條件成立時(shí)(YES)執(zhí)行循環(huán)操作,條件不成立時(shí)(NO)終止循環(huán)。
? <表達(dá)式3>指定循環(huán)控制變量每次循環(huán)后的變化。
? <語句塊>定義每次循環(huán)所執(zhí)行的代碼。
如下面的代碼,一號雷達(dá)將按順序掃描1到10號區(qū)域。
for (int i=1; i <= 10; i++) { NSLog(@"一號雷達(dá)掃描%i號區(qū)域", i); }
下面的代碼是一個(gè)簡單的數(shù)學(xué)問題,我們將計(jì)算1到100的和。
int sum = 0; for (int i=1; i <= 100; i++) { sum += i; } NSLog(@"1到100的和是%i", sum);
如果是計(jì)算1到100中偶數(shù)的和,可以修改for語句中的控制語句,如下面的代碼。
for (int i=2; i <= 100; i+=2)
■3.4.2 while語句結(jié)構(gòu)
while語句的應(yīng)用格式如下。
while (<條件>) { <語句塊> }
其中,當(dāng)<條件>為真(YES)時(shí),就會(huì)執(zhí)行<語句塊>;當(dāng)<條件>為假(NO)時(shí)終止循環(huán)結(jié)構(gòu)。
下面的例子,一號雷達(dá)會(huì)不停地工作,大家不要急著在Xcode中運(yùn)行,因?yàn)檫@個(gè)代碼不會(huì)停下來,直到程序掛掉。這種循環(huán)結(jié)構(gòu)稱為無限循環(huán)或死循環(huán)。
while (YES) { for (int i=1; i <= 10; i++) { NSLog(@"一號雷達(dá)掃描%i號區(qū)域", i); } }
雷達(dá)的工作是比較特殊的,需要不停地掃描指定區(qū)域,但在while語句結(jié)構(gòu)中,則應(yīng)該有一個(gè)合理的條件,以便循環(huán)能夠適時(shí)結(jié)束。如下面的代碼,我們使用while語句完成1到100的累加工作。
int i = 1; int sum = 0; while (i <= 100) { sum += i; i++; } NSLog(@"1到100的和是%i", sum);
■3.4.3 do-while語句結(jié)構(gòu)
do-while語句與while語句的使用比較相似,所不同的是,do-while語句結(jié)構(gòu)會(huì)在每次循環(huán)結(jié)束后進(jìn)行條件的判斷,其基本應(yīng)用格式如下。
do { <語句塊> }while (<條件>);
使用do-while語句結(jié)構(gòu)時(shí)應(yīng)注意,<語句塊>最少會(huì)執(zhí)行一次,而這也是可能出問題的地方,如果在<語句塊>中存在不滿足條件的代碼,就有可能產(chǎn)生錯(cuò)誤,所以,如果有可能,我們更建議使用while語句結(jié)構(gòu),畢竟隨便就讓程序掛掉,并不是一個(gè)好的選擇。
■3.4.4 break語句
循環(huán)語句的確可以簡化很多工作,但是,我們也需要適時(shí)地終止循環(huán)操作;在Objective-C中,break語句就可以在循環(huán)結(jié)構(gòu)中緊急剎車,從而終止整個(gè)循環(huán)的執(zhí)行。如下面的代碼,如果一號雷達(dá)發(fā)現(xiàn)可疑目標(biāo),就會(huì)顯示信息,并鎖定當(dāng)前區(qū)域。
int lockedZone = 0; for (int i=1; i <= 10; i++) { // 可疑情況的出現(xiàn)很隨機(jī) if (arc4random() % 2 == 1) { NSLog(@"警告:一號雷達(dá)在%i號區(qū)域發(fā)現(xiàn)可疑目標(biāo)", i); lockedZone = i; break; } }
代碼中,arc4random()函數(shù)的功能是產(chǎn)生一個(gè)隨機(jī)整數(shù),我們?nèi)∵@個(gè)隨機(jī)數(shù)除以2的余數(shù),余數(shù)為1時(shí)發(fā)現(xiàn)目標(biāo),并終止for循環(huán)的執(zhí)行。
在while或do-while語句結(jié)構(gòu)中,break語句同樣可以終止循環(huán)。此外,別忘了break語句在switch語句結(jié)構(gòu)中的功能也是終止。
■3.4.5 continue語句
continue語句的功能是中止當(dāng)前循環(huán),并開始下一次循環(huán)(如果條件滿足)。前面,一號雷達(dá)已經(jīng)鎖定lockedZone變量所指的區(qū)域,此時(shí),二號雷達(dá)將代替一號雷達(dá)繼續(xù)搜索其他區(qū)域,要知道,最先出現(xiàn)的目標(biāo)很可能只是誘餌。
下面的代碼,我們接著前面的示例寫。
for (int i=1; i <= 10; i++) { if (lockedZone == i) continue; NSLog(@"二號雷達(dá)正在搜索%i號區(qū)域", i); }
執(zhí)行此代碼,我們可以看到,二號雷達(dá)在到達(dá)lockedZone區(qū)域時(shí)不會(huì)執(zhí)行掃描工作,因?yàn)橐惶柪走_(dá)已經(jīng)鎖定此區(qū)域,此時(shí),使用continue語句終止此次循環(huán),并繼續(xù)下一循環(huán)。
- 虛擬桌面移動(dòng)辦公技術(shù)
- 五筆打字精品教程
- Word/Excel/PPT/PS/移動(dòng)辦公Office 5合1無師自通
- 新編電腦辦公(Windows 10 + Office 2010版)從入門到精通
- WPS Office商務(wù)辦公從新手到高手
- Office 2013輕松辦公:Word/Excel/PowerPoint三合一超級應(yīng)用大全(實(shí)戰(zhàn)案例版)
- 從零開始學(xué)Excel 2010
- Access 2010數(shù)據(jù)庫實(shí)用教程
- Office 2007辦公軟件應(yīng)用立體化教程
- 非常Easy:Excel財(cái)務(wù)高效管理
- Excel 2010高效辦公:市場與銷售管理
- Photoshop+Illustrator平面設(shè)計(jì)案例實(shí)戰(zhàn)從入門到精通:視頻自學(xué)全彩版
- 基于BIM的Revit機(jī)電管線設(shè)計(jì)案例教程
- Word/Excel/PowerPoint 2013三合一辦公應(yīng)用
- 金融精英Word實(shí)操手冊:世界知名公司這樣制作研究報(bào)告