C#从入门到精通(第4版)
上QQ阅读APP看书,第一时间看更新

6.3 跳转语句

视频讲解:光盘\TM\lx\6\07跳转语句.mp4

跳转语句主要用于无条件地转移控制,跳转语句会将控制转到某个位置,这个位置就成为跳转语句的目标。如果跳转语句出现在一个语句块内,而跳转语句的目标却在该语句块之外,则称该跳转语句退出该语句块。跳转语句主要包括break语句、continue语句、goto语句和return语句,本节将对这几种跳转语句分别进行介绍。

6.3.1 break语句

break语句只能应用在switch、while、do…while、for或foreach语句中,当多个switch、while、do…while、for或foreach语句互相嵌套时,break语句只应用于最里层的语句。如果要穿越多个嵌套层,则必须使用goto语句。

下面主要举例说明break语句在switch语句和for语句中的使用。

1.break语句在switch语句中的应用

【例6.11】创建一个控制台应用程序,声明一个int类型的变量i用于获取当前日期的返回值,然后通过使用switch语句根据变量i输出当前日期是星期几,代码如下。(实例位置:光盘\TM\sl\6\10)

        static void Main(string[] args)
        {
            int i=Convert.ToInt32(DateTime.Today.DayOfWeek);        //获取当前日期的数值
            switch (i)                                              //调用switch语句
            {
              case 1: Console.WriteLine("今天是星期一"); break;       //如果i是1,则输出今天是星期一
              case 2: Console.WriteLine("今天是星期二"); break;       //如果i是2,则输出今天是星期二
              case 3: Console.WriteLine("今天是星期三"); break;       //如果i是3,则输出今天是星期三
              case 4: Console.WriteLine("今天是星期四"); break;       //如果i是4,则输出今天是星期四
              case 5: Console.WriteLine("今天是星期五"); break;       //如果i是5,则输出今天是星期五
              case 6: Console.WriteLine("今天是星期六"); break;       //如果i是6,则输出今天是星期六
              case 0: Console.WriteLine("今天是星期日"); break;       //如果i是7,则输出今天是星期日
            }
            Console.ReadLine();
        }

程序的运行结果为“今天是星期三”。

2.break语句在for语句中的应用

【例6.12】 创建一个控制台应用程序,使用两个for语句做嵌套循环,在内层的for语句中,使用break语句,实现当int类型变量j等于12时,跳出内循环,代码如下。(实例位置:光盘\TM\sl\6\11)

        static void Main(string[] args)
        {
            for (int i=0; i<4; i++)                    //调用for语句
            {
              Console.Write("\n第{0}次循环:", i);      //输出提示是第几次循环
              for (int j=0; j<200; j++)               //调用for语句
              {
                  if (j==12)                          //如果j的值等于12
                      break;                          //终止循环
                  Console.Write(j+" ");               //输出j
              }
            }
            Console.ReadLine();
        }

程序的运行结果为:

    第0次循环:0 1 2 3 4 5 6 7 8 9 10 11
    第1次循环:0 1 2 3 4 5 6 7 8 9 10 11
    第2次循环:0 1 2 3 4 5 6 7 8 9 10 11
    第3次循环:0 1 2 3 4 5 6 7 8 9 10 11
  

从程序的运行结果中可以看出,使用break语句只终止了内层循环,并没有影响到外部的循环,所以程序依然经历了4次循环。

6.3.2 continue语句

continue语句只能应用于while、do…while、for或foreach语句中,用来忽略循环语句块内位于其后面的代码而直接开始一次新的循环。当多个while、do…while、for或foreach语句互相嵌套时,continue语句只能使直接包含它的循环语句开始一次新的循环。

说明 在循环体中,不要在同一个语句块中使用多个跳转语句。

【例6.13】创建一个控制台应用程序,使用两个for语句做嵌套循环,在内层的for语句中,使用continue语句,实现当int类型变量j为偶数时,不输出,重新开始下一次内层的for循环,只输出0~20内的所有奇数,代码如下。(实例位置:光盘\TM\sl\6\12)

        static void Main(string[] args)
        {
            for (int i=0; i<4; i++)                    //调用for循环
            {
              Console.Write("\n第{0}次循环:", i);      //输出提示第几次循环
              for (int j=0; j<20; j++)                 //调用for循环
              {
                  if (j % 2==0)                        //调用if语句判断j是否是偶数
                      continue;                        //如果是偶数则使用continue语句继续下一循环
                  Console.Write(j+" ");                //输出j
              }
              Console.WriteLine();
            }
            Console.ReadLine();
        }

程序的运行结果为:

    第0次循环:1 3 5 7 9 11 13 15 17 19
    第1次循环:1 3 5 7 9 11 13 15 17 19
    第2次循环:1 3 5 7 9 11 13 15 17 19
    第3次循环:1 3 5 7 9 11 13 15 17 19
  

从程序的运行结果可以看出,当int类型的变量j为偶数时,使用continue语句,忽略它后面的代码,而重新执行内层的for循环,输出0~20以内的奇数,这期间,并没有影响外部的for循环,程序依然执行了4次循环。

6.3.3 goto语句

goto语句用于将控制转移到由标签标记的语句。goto语句可以被应用在switch语句中的case标签和default标签,以及标记语句所声明的标签。goto语句的3种形式如下。

        goto 【标签】
        goto case 【参数表达式】
        goto default

goto【标签】语句的目标是具有给定标签的标记语句,goto case语句的目标是它所在的switch语句中的某个语句列表,此列表包含一个具有给定常数值的case标签,goto default语句的目标是它所在的switch语句中的default标签。

说明 goto的一个通常用法是将控制传递给特定的switch-case标签或switch语句中的默认标签。goto语句还用于跳出深嵌套循环。

【例6.14】创建一个控制台应用程序,通过goto语句实现程序跳转到指定语句,代码如下。(实例位置:光盘\TM\sl\6\13)

        static void Main(string[] args)
        {
            Console.WriteLine("请输入要查找的文字:");              //输出提示信息
            string inputstr=Console.ReadLine();                 //获取输入值
            string[] mystr=new string[5];                       //创建一个字符串数组
            mystr[0]="用一生下载你";                              //向数组中添加第一个元素
            mystr[1]="芸烨湘枫";                                 //向数组中添加第二个元素
            mystr[2]="一生所爱";                                 //向数组中添加第三个元素
            mystr[3]="情茧";                                    //向数组中添加第四个元素
            mystr[4]="风华绝代";                                 //向数组中添加第五个元素
            for (int i=0; i<mystr.Length; i++)                  //调用for循环语句
            {
              //通过if语句判断是否存在输入的字符串
              if (mystr[i].Equals(inputstr))
              {
                  gotoFound;                                   //调用goto语句跳转到Found
              }
            }
            Console.WriteLine("您查找的{0}不存在!", inputstr);   //输出信息
            gotoFinish;                                        //调用goto语句跳转到Finish
        Found:
            Console.WriteLine("您查找的{0}存在!", inputstr);    //输出信息,提示存在输入的字符串
        Finish:
            Console.WriteLine("查找完毕!");                    //输出信息,提示查找完毕
            Console.ReadLine();
        }

程序的运行结果如图6.12所示。

图6.12 查找指定字符串

注意 虽然goto语句有一定的使用价值,但是目前对它的使用存在争议。有人建议避免使用它,有人建议把它用来作为排除错误的基本工具,各种观点截然不同。虽然许多人不用goto语句也能够编程,但是仍然有人使用它。所以要小心使用,同时一定要确保程序是可维护的。

6.3.4 return语句

return语句表示返回,当把return语句用在普通的程序代码中时,它表示返回,并且不再执行return之后的代码。当把return语句用在类中的方法时,它就是控制返回方法的调用者,如果方法有返回类型,return语句必须返回这个类型的值;而如果方法没有返回类型,则应该使用没有表达式的return语句。

【例6.15】创建一个控制台应用程序,定义一个返回类型为string类型的方法,利用return语句,返回一个string类型的值,然后在Main方法中调用这个自定义的方法,并输出这个方法的返回值,代码如下。(实例位置:光盘\TM\sl\6\14)

        static string MyStr(string str)                           //创建一个string类型方法
        {
            string OutStr;                                        //声明一个字符串变量
            OutStr="您输入的数据是:"+str;                           //为字符串变量赋值
            returnOutStr;                                         //使用return语句返回字符串变量
        }
        static void Main(string[] args)
        {
            Console.WriteLine("请您输入内容:");                     //输出提示信息
            string inputstr=Console.ReadLine();                   //获取输入的数据
            Console.WriteLine(MyStr(inputstr));                   //调用MyStr方法并将结果显示出来
            Console.ReadLine();
        }

程序的运行结果如图6.13所示。

图6.13 return语句的应用

闯关训练:通过使用goto跳转语句,实现在数组中搜索指定图书的功能,具体实现时,首先在窗体的左侧显示一个图书列表,然后在窗体右侧添加一个文本框控件和一个按钮,当用户输入要查找的书名时,单击按钮,即可在左侧图书列表中查找是否存在该图书。