官术网_书友最值得收藏!

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)。

主站蜘蛛池模板: 睢宁县| 随州市| 嘉祥县| 五家渠市| 偏关县| 同心县| 从化市| 当涂县| 玛多县| 仪征市| 成都市| 松江区| 肇州县| 仁怀市| 景东| 上蔡县| 自贡市| 紫阳县| 泰宁县| 合山市| 昭平县| 金溪县| 东乌| 新干县| 彰化县| 溧阳市| 新竹县| 都兰县| 章丘市| 双牌县| 介休市| 长兴县| 锦州市| 景德镇市| 武功县| 镇安县| 宜昌市| 洪雅县| 文登市| 房产| 皋兰县|