C#程序设计自学经典
上QQ阅读APP看书,第一时间看更新

3.3 跳转语句的应用

跳转语句主要用于无条件地转移控制到某个位置,这个位置就称为跳转语句的目标。跳转语句主要包括break语句、continue语句、return语句和goto语句4种。下面将对这几种跳转语句做简单的介绍。

3.3.1 break跳转语句

在之前讲解的switch语句中用到了break语句,break break语句不仅可以使用在此,还可以把它用于for、while、do…while以及foreach循环语句中。break语句使程序跳出当前循环,并继续执行循环之后的代码。当break出现在嵌套循环语句中时,break语句只能出现在最里层的语句中。如果要穿越多个嵌套语句,则必须使用goto语句。

下面通过一个小例子来讲解下break语句的用法。

例3-6:break语句的使用(ConsoleBreak)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleBreak
    {
        class Program
        {
            static void Main(string[] args)
            {
                int num = 0;
                string[] strs = new string[] { "LiLei", "HanMeimei", "LinTao", 
                "Kate", "Uncle Wang", "Jim", "Tom", "Lily", "Lucy", "Ann", 
                "polly" };
                foreach (string s in strs)
                {
                    num++;
                    if (s == "Tom")
                    {
                        Console.WriteLine("找到Tom了,他在编号" + num + "的位置!");
                        break;
                    }
                    Console.WriteLine("位置" + num + "处没有Tom");
                }
    
                Console.ReadLine();
            }
        }
    }

运行结果如图3-14所示。

图3-14 break语句的使用

此例使用foreach语句遍历数组,查找“Tom”所在的位置,找到后使用break语句结束循环。

3.3.2 continue跳转语句

continue语句与break语句类似,必须出现在for、while、do…while和foreach循环语句中,continue语句的作用是退出当前循环结构的本次循环,并开始执行下一次循环,而不是退出当前循环结构。当嵌套循环语句存在时,continue语句只能使直接包含它的循环语句开始一次新的循环。

下面通过一个小例子来讲解下continue语句的用法。

例3-7:continue语句的使用(ConsoleContinue)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleContinue
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 1; i <= 10; i++)
                {
                    if (i % 2 != 0)
                        continue;
                    Console.WriteLine(i);
                }
                Console.ReadLine();
            }
        }
    } 

运行结果如图3-15所示。

图3-15 continue语句的使用

此例使用for循环语句,对循环变量i取余,如果余数不为0,则continue语句就终止当前循环,继续下一次循环,所以只输出2、4、6、8、10。

3.3.3 return跳转语句

return语句终止它出现在其中的方法的执行并将控制返回给调用方法。它还可以返回一个可选值。如果方法为void类型,则可以省略return语句。

如果return语句位于try块中,则将在控制流返回到调用方法之前执行finally块(如果存在)。

下面通过一个小例子来讲解下return语句的用法。

例3-8:return语句的使用(ConsoleReturn)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleReturn
    {
        class Program
        {
            static void Main(string[] args)
            {
                while (true)
                {
                    string num1, num2, choose;
                    Console.WriteLine("请输入一个数字(输入“e”退出程序)");
                    num1 = Console.ReadLine();
                    if (num1 == "e")
                    {
                        break;
                    }
                    Console.WriteLine("请输入另一个数字");
                    num2 = Console.ReadLine();
                    Console.WriteLine("请选择要进行的运算:");
                    Console.WriteLine("1.+\t2.-\t3.*\t4./");
                    choose = Console.ReadLine();
                    Console.WriteLine("计算结果为:{0}", Operational(Convert. 
                    ToDouble(num1), Convert.ToDouble(num2), choose));
                    Console.WriteLine("——————————————");
                }
                Console.WriteLine("您已经成功退出,再见!");
                Console.ReadLine();
            }
    
            public static string Operational(double num1, double num2, string 
            choose)
            {
                switch (choose)
                {
                    case "1":
                        return (num1 + num2).ToString();
                    case "2":
                        return (num1 - num2).ToString();
                    case "3":
                        return (num1 * num2).ToString();
                    case "4":
                        return (num1 / num2).ToString();
                    default:
                        return "输入有误!";
                }
            }
        }
    }

运行结果如图3-16所示。

图3-16 return语句的使用

此实例实现了一个简易的加减乘除计算器的效果,代码中根据输入的choose值判断做何种运算,switch语句的每个case中使用return语句直接将转为string类型后的计算结果返回了函数调用处,这又引出了case中的一种特殊情况——当一个case中需要return语句时,break语句要省略,因为两者共存没有任何意义(位于后面的一个语句将永远无法被程序执行到)。关于函数的相关知识将在后续章节进行讲解,此处不做具体讲解。注意此实例未进行异常处理,旨在讲解return的用法。

3.3.4 goto语句

goto语句用于将控制转移到事先定义的标签标记的语句。goto语句可以应用于switch语句中的case标签和default标签以及事先定义的标记语句所声明的标签。goto语句的三种形式及介绍如下。

    goto case表达式:

goto case语句的目标为它所在switch语句中的某个语句列表。

    goto default:

goto default语句的目标是它所在的switch语句的default标签。

    goto 【标签】:

goto【标签】语句的目标是具有给定标签的标记语句。此用法可用于跳出多层嵌套循环语句。但是,不能使用goto语句从外部进入循环。

下面通过一个小例子来讲解下goto语句的用法。

例3-9:goto语句的使用(ConsoleGoto)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleGoto
    {
        class Program
        {
            static void Main(string[] args)
            {
                while (true)
                {
                    Console.WriteLine("请输入任意字符,(输入"e"退出)");
                    string str = Console.ReadLine();
                    if (str == "e")
                        goto exit;
                    Console.WriteLine("您输入了" + str);
                }
            exit:
                Console.WriteLine("您已经成功退出循环!");
                Console.ReadLine();
            }
        }
    } 

运行结果如图3-17所示。

图3-17 goto语句的使用

此实例演示了goto【标签】的用法,当输出“e”时,程序直接跳出了while循环,并在定义为exit的标签处继续执行程序。

goto在使用时存在一些争议,有人建议避免使用它,因为它会打乱程序代码的执行顺序,使程序代码的可维护性较差,所以应尽量避免使用goto语句。

3.3.5 各跳转语句的区别

(1)break语句:跳出(终止)循环。

(2)continue语句:跳出(终止)当前的循环,继续执行下一次循环。

(3)return语句:跳出循环以及其包含的函数。

(4)goto语句:可以跳出循环到已标记好的位置上。