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

3.5 跳轉語句

跳轉語句用于中斷當前執行順序,從指定語句接著執行。在switch語句中曾使用跳轉語句中的break語句,中斷了當前的switch語句塊,執行switch后的語句。

跳轉語句同樣分為多種,其關鍵字及其使用特點如下所示。

break語句 break語句用于終止它所在的循環或switch語句。

continue語句 continue語句將控制流傳遞給下一個循環。

return語句 return語句終止它出現在其中的方法的執行,并將控制返回給調用方法。

goto語句 goto語句將程序控制流傳遞給標記語句。

3.5.1 break語句

3.2.4節曾將break語句用于switch語句塊,對break語句有了簡單了解。break有兩種用法:

□ 用在switch語句的case標簽之后,結束switch語句塊,執行switch{}后的語句。

□ 用在循環體,結束循環,執行循環{}后的語句。

循環有多種,任意一種循環都可以使用break跳出。接下來通過實例講述break語句與循環語句的結合。

【練習3-14】

851在100以內有兩個約數,23和37。找出100以內,851除了1以外的最小約數,語句如下:

int num=0;
for (int i = 2; i < 101; i++)
{
    if (851 % i == 0)
    {
        num = i;
        break;
    }
}
Console.Write(num);

運行結果為:23。說明循環在i=23時就結束了,否則i應該為37。break語句直接跳出了for循環而不是if選擇語句,也說明if選擇語句中不需要使用break跳轉。

3.5.2 continue語句

continue語句是跳轉語句的一種,用在循環中可以加速循環,但不能結束循環。continue語句與break不同之處在于:

□ continue語句不能用于選擇語句。

□ continue語句在循環中不是跳出循環塊,而是結束當前循環,進入下一個循環,忽略當前循環的剩余語句。

同樣是找出約數,將練習3-14改為找出100以內除了1以外的所有約數,如練習3-15所示。

【練習3-15】

找出100以內,除了1以外,851的所有約數,語句如下。

for (int i = 2; i < 101; i++)
{
    if (851% i == 0)
    {
        num = i;
        Console.WriteLine(num);
        continue;
    }
}

執行結果為:

23
37

練習3-15的例子中省略continue效果是一樣的,因為循環語句中continue語句后沒有語句,因此有沒有continue都將執行下一個循環。continue語句的使用效果如練習3-16所示。

【練習3-16】

輸出整型數1至30,但取消整數5的倍數的輸出,在執行到5的倍數時換行。使用語句如下所示:

for (int i = 1; i < 30; i++)
{
    if (i % 5==0)
    {
        Console.Write("\n");
        continue;
    }
    if (i < 10)
    {
        Console.Write(" {0} ", i);
    }
    else
    {
        Console.Write(i);
        Console.Write(" ");
    }
}

執行結果如圖3-22所示。從執行結果看得出,在執行至continue語句后,“Console.Write(" {0} ", i);”語句和“Console.Write(i);”語句都沒有執行,數字5沒有輸出,而輸出了換行。

圖3-22 30以內的數字顯示

3.5.3 return語句

return語句經常用在方法的結尾,表示方法的終止。方法是類的成員,將在第5章中介紹。

方法相當于其他編程語言中的函數,是描述某一功能的語句塊。方法定義后并不是直接執行的,而是在其他地方使用語句調用的,如同變量在聲明后在其他地方被調用。

方法可以有返回值,在調用時將返回值傳遞給調用語句,也可以沒有返回值。返回值可以是常數,也可以是變量,由return語句定義返回值。

方法語句塊中,在return語句后沒有其他語句,但控制流并沒有結束,而是找不到接下來要進行的語句。使用return語句將控制流傳遞給調用該方法的語句,同時將返回值傳遞給調用語句。

方法的定義需要有訪問修飾符、返回數據類型、方法名稱和參數列表,以及方法中的語句塊。參數是方法中的變量,這些變量由調用它的語句來賦值,作為已經被初始化的數據來使用。

如定義一個方法power()將整型數字num求pow次方,該方法含有兩個參數,一個是整型數字num,另一個是該數需要獲取的乘方數pow,方法返回兩個數的計算結果,代碼如下:

public static int power(int num, int pow)
{
    int newnum=1;
    for (int i = 1; i <= pow; i++)
    {
        newnum = newnum * num;
    }
    return newnum;
}

上述代碼中,通過for循環將變量num乘了pow次,并將結果賦給newnum。最后一條語句使用return關鍵字返回運算結果newnum。

方法的調用需要指定方法中的參數,如調用該方法,計算12的10次方,則調用語句如下所示:

power(12,10);

如在Main()函數中調用該方法,輸出12的10次方計算結果,使用語句如下所示:

Console.WriteLine("數字12的10次方為{0}",power(12,10));

運行上述代碼,其結果如下所示。

數字12的10次方為61917364224

3.5.4 goto語句

goto語句是跳轉語句中最靈活的,也是最不安全的。goto語句可以跳轉至程序的任意位置,但欠考慮的跳轉將導致沒有預測的漏洞。goto語句也有限制:

□ 可以從循環中跳出,但不能跳轉到循環語句塊中。

□ 不能跳出類的范圍。

使用goto語句首先要在程序中定義標簽,標簽是一個標記符,命名同變量名一樣。標簽后是將要跳轉的目標語句,一條以內不用加{},超過一條則必須放在{}內,{}后不用加分號。如下所示:

label:{}

接著將標簽名放在goto語句后,即可跳轉至目標語句,如下所示:

goto label;

練習3-17簡單地顯示了goto語句的用法和格式,將控制流從循環中跳出。

【練習3-17】

輸出從1到10的整數,在輸出整數5時跳出,從整數5往后不再輸出,使用語句如下。

    for (int i = 1; i < 11; i++)
    {
        Console.WriteLine(i);
        if (i == 5)
        {
            Console.Write("\n");
            goto comehere;
        }
    }
comehere:
    {
        Console.WriteLine("到5了,結束了");
    }

除了跳出循環語句,goto語句另外一種用法是跳出switch語句并轉移到另一個case標簽,如練習3-18。

【練習3-18】

定義整型num表示第幾個季節,定義字符串title表示季節名稱,有如下的代碼:

int num = 4;
string title="";
switch (num)
{
    case 1:
        title = "春天";
        break;
    case 2:
        title = "夏天";
        break;
    case 3:
        title = "秋天";
        break;
    case 4:
        title = "冬天";
        goto case 2;
}
Console.WriteLine(title);

執行結果為:

夏天

由結果看出,因為num變量使用的是常數4,所以控制流將執行case 4,但在case 4中使用goto語句將控制流轉向了case 2,導致顯示結果為case 2中的夏天。case在這里起到了標簽的作用。

主站蜘蛛池模板: 玉田县| 秭归县| 广河县| 杭州市| 双城市| 兴安盟| 芮城县| 石嘴山市| 贵港市| 五台县| 中江县| 黄山市| 泗阳县| 鹤庆县| 和顺县| 福安市| 芒康县| 宿迁市| 白山市| 余江县| 卫辉市| 东安县| 拉萨市| 清远市| 湛江市| 宁明县| 永兴县| 三亚市| 公安县| 林西县| 靖安县| 崇明县| 济阳县| 东宁县| 满城县| 成安县| 若尔盖县| 虞城县| 巴林右旗| 竹北市| 淳化县|