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跳转语句,实现在数组中搜索指定图书的功能,具体实现时,首先在窗体的左侧显示一个图书列表,然后在窗体右侧添加一个文本框控件和一个按钮,当用户输入要查找的书名时,单击按钮,即可在左侧图书列表中查找是否存在该图书。