




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本章涉及内容目录41内容概述- 1 -4.2程序的三种基本结构- 1 -421 顺序结构程序- 1 -422 选择结构程序- 2 -423 循环结构程序- 2 -4.3条件语句- 3 -431 if 语句- 3 -432 条件语句的使用- 4 -44循环语句- 5 -4.4.2 构造循环结构的dowhile语句- 6 -4.4.3 for循环语句- 7 -444 三种循环语句的比较- 8 -45 switch 开关语句- 8 -46 转移语句- 9 -461 break 语句- 10 -4.6.2 coutinue语句- 10 -4.6.3 return语句- 11 -本章小结- 12 -第四章 程序流程控制流程控制语句是用来控制程序的流程或走向的。流程控制对于任何一门编程语言来说都是至关重要的,它提供了控制程序执行步骤的基本手段,是程序的核心部分。虽然我们在书写程序时只能一句接一句地顺序书写,但实际总是存在多种情况,需要解决此类问题在执行时可以跳过某些语句或反复执行某些语句,这类语句便是流程控制语句。Java提供了许多流程控制表达式,编程人员可以利用这些表达式构造出功能完整的程序。本章将讨论Java语言的流程控制。41内容概述Java提供了较为丰富的流程控制功能,这些流程控制语句几乎完全是C和C+的翻版,Java只作了很小的改动。事实上,流程控制和现实生活中的许多决策模式是一致的。我们经常需要依照不同的条件决定采用相应的对策,对应到程序设计中,就需要使用条件语句、开关语句或转移语句;具体来说,Java的流程控制是通过如下语句来实现的:条件语句:if;循环语句:while,do-while,for;开关语句:switch,case,break;转移语句:break,continue,label;返回语句:return;4.2程序的三种基本结构421 顺序结构程序顺序结构程序中语句的执行次序是按照语句的书写顺序一句接一句执行的,如图4.1a所示。语句1语句2语句3开 始结 束图4.1a 顺序结构422 选择结构程序选择结构也称为分支结构。在选择结构程序中,尽管程序仍然是一句接一句顺序书写的,但在执行程序时,根据选择判定条件的“真”、“假”,只执行程序中的一部分语句,而不执行程序中的另外一部分语句,如图4.1b所示。语句1布尔表达式语句2(1)语句2(2)语句3TF图4.1b 选择结构423 循环结构程序循环结构也称为重复结构。在循环结构程序中,位于循环体中的语句可以根据循环条件反复执行多次。如图4.1c所示。语句1布尔表达式语句2语句3FT图4.1c 循环结构4.3条件语句条件语句是程序设计语言中最基本的流程控制语句,又称分支语句,几乎任何一门程序设计语言的条件语句都用到了if关键字,因而条件语句又被称作if语句。条件语句分为简单条件语句和复合条件语句两种,如果条件语句的分支中又包括了条件语句,即称为复合条件语句,或嵌套条件语句;否则称为简单条件语句。431 if 语句一、Java语言的条件语句为if-else,基本形式如下if (布尔表达式) 语句块1else 语句块2该语句的执行次序是:当布尔表达式为“真”时执行“语句块1”中的语句,否则执行“语句块2”中的语句。使用ifelse语句可构成双分支选择结构程序。例如: if (ab)max=b; else max=a;此例题执行过程就是:如果表达式(ab)为真,则执行第一条语句(max=b),否则执行第二条语句(max=a)。二、Java语言的条件语句为if-else,省略了else的if 语句 if (布尔表达式) 语句块该语句的执行次序是:当布尔表达式为“真”时执行“语句块”中的语句,否则跳过这些语句。使用省略了else的if语句可构成单分支选择结构。三、if语句的嵌套if语句的常见嵌套形式如下: if (布尔表达式1) 语句块1 else if (布尔表达式2) 语句块2 else if (布尔表达式3) 语句块3 else 语句块n+1使用嵌套if语句可构成多分支选择结构程序。事实上,对于任何一个编程人员而言,复合if的使用都会是很普遍的。每件事情似乎都存在多种可能性,经常不止两种,对于其中每一种可能情形,我们都必须决定采取相应动作。这些可能性反映到程序中,表现为程序流程中的多个分支,这就是复合条件语句的情况。432 条件语句的使用现在我们可以用条件语句来编写一个具有一定功能的程序。下面请看这个实例:例41 编程判断某一年是否为闰年。public class leapyearpubic static void main(String args)/*方法1:if语句的一般形式*/int year=1989;if(year%4=0&year%100!=0)|(year%400=0)System.out.println(year+是闰年!);elseSystem.out.println(year+不是闰年!);/*方法2:使用if-else嵌套形式*/year=2050;if(year%4=0)if(year%100=0)if(year%400=0)leap=true;elseleap=false;elseleap=true;elseleap=false;if(leap=true)System.out.println(year+是闰年);elseSystem.out.println(year+不是闰年);运行结果为:1989不是闰年!2000是闰年!2050不是闰年!对比这两种方法,体会其中的联系和区别,在不同的场合选用合适的方法。44循环语句Java语言提供了3种格式的循环语句:while语句,dowhile语句和for语句,下面我们分别介绍这三种语句格式。在Java语言中可以随时说明局部变量加以利用,并且仅在说明的程序块中有效。循环语句中常用此局部变量作为循环变量,当循环结束时,局部变量亦被内存空间释放掉,这种动态的分配内存的机制很方便,且节约内存(这与C+中不同)。4.4.1 while循环语句while循环语句的表式形式为: while(表达式) 语句块; 布尔表达式循环体语句块TFWhile循环语句先计算布尔表达式的值,如果为真,执行语句块;为假,转入执行下一条语句。也就是说,语句块可能不被执行或执行多次。同样,while语句的表达式应为布尔表达式。如图4.2所示 图4.2 while循环结构的执行流程例42 用while语句求1100的和。public class whiletestpublic static void main(String args)int n=1,sum=0;while(n=100)sum+=n;n+;System.out.println(sum=+sum);运行结果为Sum=50504.4.2 构造循环结构的dowhile语句dowhile语句的一般形式为:do 循环体语句块 while(布尔表达式)dowhile语句中各个成分的执行次序是:先执行一次循环体语句块,然后再判断布尔表达式的值,若值为false,则跳出dowhile循环,执行后面的语句;若值为true,则再次执行循环体语句块。如此反复,直至布尔表达式的值为false,跳出dowhile循环为止。其执行流程如图4.3所示。布尔表达式循环体语句块TF 图4.3 dowhile循环结构的执行流程同样利用dowhile循环结构来实现例4.2求1100的和public class whiletestpublic static void main(String args)int n=1,sum=0;dosum+=n;n+; while(n100)System.out.println(sum=+sum);运行结果同例4.24.4.3 for循环语句for语句是最标准的循环语句,几乎所有的高级编程语言都提供了类似的循环语句。另外,这种循环结构还是功能最强的一种循环结构。For语句的功能是循环执行一段语句,直到某个条件为假。一、for语句的一般形式: for (循环初始值;循环布尔表达式;循环增长量) 循环体语句块 for语句的执行流程见图4.4,执行过程如下:(1) 求解初始表达式的值。(2) 求解布尔表达式的值,若值为真,则执行循环体语句块,然后再执行第(3)步;若值为假,则跳出循环语句。(3) 求解循环过程表达式后,转去执行第(2)步。F布尔表达式循环体语句块T循环布尔表达式循环初始值图4.4 for循环流程图同样利用for循环结构来实现例4.2求1100的和public class whiletestpublic static void main(String args)int n,sum=0;for(n=1;n=100;n+) Sum+=n; System.out.println(sum=+sum);二、循环语句的嵌套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套,即多重循环。Java语言的三种循环方式(while,do-while,for)可以自身嵌套,也可以互相嵌套。循环嵌套时应该注意的是:无论使用哪种嵌套关系,都必须保证每一个循环结构的完整性,不能出现交叉。444 三种循环语句的比较Java系统提供了三种循环语句,一般情况下,这三种循环语句是可以相互替代的,尤其是对于那些确切地知道所需执行次数的循环。然而,由于for语句头中包含了控制循环所需要的各个构件,因此,对于同样的问题,使用for循环编写的程序最简洁清晰。如果读者如本节例题所示,求自然数1100之和的问题分别用了三种循环结构写出,就可以清楚地看到这一事实。然而,对于那些只知道某些语句要反复执行多次(至少执行一次),但不知道确切的执行次数时,使用dowhile循环可以使程序更清晰;而对于那种某些语句可能要反复执行多次,也可能一次都不执行的问题,当然是使用while循环为最好。45 switch 开关语句前面介绍过条件语句。条件语句分简单条件语句和复合条件语句两种。简单条件语句一般只处理两种可能情形,即条件的成立与否。Java语言有一个多分选择的switch开关语句,它根据某个表达式的值在多个分支语句中决定执行哪个分支语句,switch语句根据表达式的值来决定执行许多不同操作中的某一个操作,即使用switch语句是构造多分支选择结构程序的简明形式。其语句格式如下:switch (表达式) case 值1;语句块1;break;/分支1 case 值2;语句块2;break;/分支2 case 值n;语句块n;break;/分支n default 值n+1;语句块n+1; /分支n+1 执行switch语句时,首先需要计算括号内表达式的值,然后把这个值与case后面的常量比较。执行第一个匹配下的语句分支,若无匹配则执行最后一个default分支,如同时缺省default前缀,则不执行任何语句。下面我们通过具体例子来加深对switch语句的理解:例43给定一个数字月份,输出该月份的英文public class monthoppublic static void main(String args)int month=6;switch (month)case 1:System.out.println(January);break; case 2:System.out.println(February);break;case 3:System.out.println(March);break;case 4:System.out.println(April);break;case 5:System.out.println(May);break;case 6:System.out.println(June);break;case 7:System.out.println(July);break;case 8:System.out.println(August);break;case 9:System.out.println(September);break;case 10:System.out.println(October);break;case 11:System.out.println(November);break;case 12:System.out.println(December);break;运行结果为:June当然,你可以使用if语句来实现它,但结构复杂。与case语句相比,if语句适用范围更广,而switch只有根据单个整型变量来做决定。另外,提供给case语句的数值必须是单一的。关于switch语句,必须注意如下事项:(1) 尽管可以将switch语句看作是if语句的变形,但实际上switch语句只能取代if语句的一小部分功能:它只能作等式比较,即比较括号内表达式的值与常量值是否相等;标准if语句可以作各种比较。(2) 括号内的表达式只能是整型或字符型表达式,不能是其他数据类型(包括浮点型)。(3) 同一个switch语句不能有两个case常量具有相同的值。(4) 每一个case分支后面的语句集无需用花括号括起来。(5) 每一分支之后通常必须使用break语句,否则会执行随后的语句,直至遇到一个break。46 转移语句转移语句是用来直接控制执行流程的语句,程序设计时,有时需要中断正在执行的程序段,转而执行另外程序段,这时要使用转移语句。从另一个角度来说,转移语句提供了改变while、dowhile、for循环的正常行为的附加手段。其中,break语句我们已经在上节介绍开关语句switch时介绍过。事实上,和switch语句结合使用,可以说是break语句最常用的。从功能上讲,break语句的作用是直接中断当前正在执行的语句,跳出switch或循环语句。Java语言提供了三种无条件转移语句:break、return及continue,注意Java语言中不再提供goto语句。461 break 语句break语句通常有不带标号和带标号两种形式: break; break Lab;其中:break是关键字;Lab是用户定义的标号。break语句虽然可以独立使用,但通常主要用于switch结构和循环结构中,控制程序的执行流程转移。它使用时可有下列三种情况:(1) break语句用在switch语句中,其作用是强制退出switch结构,执行switch结构后的语句。(2) break语句用在单层循环结构的循环中,其作用是强制退出循环结构。若程序中有内外两重循环,而break语句写在内循环中,则执行break语句只能退出内循环,而不能退出外循环。若想要退出外循环,可使用带标号的break语句。(3) break Lab语句用在循环语句中,必须在外循环入口语句的前方写上Lab标号,这样可以使程序流程退出标号所指明的外循环。例 4.4 break语句强迫跳出循环的例子。public class breaktestpublic static void main(String args)int sum=0;for (int i=1;i=10;i+ )if(i%2=0) break;elseSystem.out.print(现在i=+i+,);sum+=i;System.out.println(sum=+sum);运行结果为:现在i=1,sum=14.6.2 coutinue语句coutinue语句也称为循环的短路语句,它只能用于循环结构中,用来结束本次循环或跳转到外层循环中。无标号的coutinue语句结束本次循环,有标号的coutinue语句可以选择哪一层的循环被继续执行。每次循环都是从循环体的第一条语句开始,一直到最后一条语句结束,在循环中continue语句起到循环体逻辑上的最后一条语句的作用,而非实际上最后一条语句,它使程序转移到循环程序的开始。它有下述两种形式:continue;continue Lab;其中:continue是关键字;Lab为用户定义的标号。使用continue语句应注意下述几点:(1) continue语句只能用于循环结构中。(2) 用在循环结构中的continue语句的作用是当程序执行到continue语句时,程序会回到循环的入口处执行下一次循环,而使循环体内写在continue语句后的语句不执行。(3) 当程序中有嵌套的多层循环时,若想从内循环跳到外循环,可以使用带标号的continue Lab语句,此时应在外循环的入口语句的前方加上标号。(4) Continue语句和break语句虽然都用于循环语句中,但存在着本质区别:continue语句只用于结束本次循环,再到循环起始去判断条件;而break语句用于终止循环,强迫循环结束,不再去判断条件。同样利用continue语句来实现例4.4public class continuetestpublic static void main(String args)int sum=0;for (int i=1;i=10;i+ )if(i%2=0) continue;elseSystem.out.print(现在i=+i+,);sum+=i;System.out.println(sum=+sum);运行结果为:现在i=1,现在i=3,现在i=5,现在i=7,现在i=9,现在i=254.6.3 return语句return语句用来使程序从方法中返回,并为方法设置一个返回值,子方法可以有一到多个return语句。当程序执行到此语句时,将立即返回其上一级方法。return语句格式如下: return 由此可以看出,方法可以返回值,也可以不返回值。方法是否需要返回值,以及返回值的数据类型,均取决于方法声明。除类的构造方法外,所有方法均有一个返回类型,这就是返回值的数据类型,如果返回类型为void,表明该方法不返回数据。本章小结本章我们介绍了Java语言的流程控制。对于程序员来说,Java语言并不显陌生,它们的流程控制几乎和C/C+完全一致,只不过少了GOTO语句。但实际上,Java和C/C+在流程控制上还是有其他一些细微的差别。另外,Java和C/C+指针和类型转换上也存在很大差别。Java把安全性提到了一个较高的地位,为此它不支持指针。本章练习1以下程序输出的结果是:public class IfTest public static void main(String args) int x = 3; int y = 1; if (x = y) System.out.println(Not equal); else System.out.println(Equal); 2以下程序输出的结果是:public class Test public static void main(String args) int i = 1; while (i) if (i= =5) break; +i; 3给出如下程序: switch (i) default: System.out.println(Hello);为i选择两个合法的参数类型? A. char;B. byte;C. float;D. double;E. Object4以下程序输出结果是:class Test public static void main(String args) int a=10;System.out.println(a+);System.out.println(a+);System.out.println(a);System.out.println(+a);5以下程序输出结果是:class Test public static void main(String args) int i = 1, j = 10 ;do if (i+ -j) continue; while (i5); System.out.println(i);System.out.println(j);6写程序求200到300间的素数。7以下程序的输出结果是:1. public class SwitchTest 2. public static void main (String args) 3. System.out.println(value = + switchIt(4);4. 5. public static int switchIt(int x) 6. int j = 1;7. switch (x) 8. case 1: j+;9. case 2: j+;10. case 3: j+;11. case 4: j+;12. case 5: j+;13. default:j+;14. 15. return j + x;16. 17. 8以下程序输出的结果是:class Test public static void main(String args) int i = 0; for (; i 4; i += 2) System.out.print(i + ); System.out.println(i);9以下程序输出的结果是:public class TestR public static void main( String args ) boolean flag; int i=0;do flag = false; System.out.print( i+ ); flag = i 10; continue; while ( (flag)? true:false ); 10以下程序输出的结果是:public class TestR public static void main( String args ) int i = 1,j = -1;switch (i) case 0,1:j = 1;case 2:j = 2;default; j = 0;System.out.println(j=+j); 11以下程序输出的结果是:public class TestR public static void main( String args ) for (int i =0; i -j) break tp; break tp; System.out.println(i= +i ,j =+j);13以下程序的输出结果是:public class TestR public static void main( String args ) int x = 1, y =6; while (y-) x+; System.out.println(x = + x + y = +y);14以下程序的输出结果是:public class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共享经济模式探索-洞察及研究
- 数字艺术市场交易活跃度在2025年的艺术市场消费趋势研究报告
- 数字艺术市场交易活跃度与知识产权保护2025行业政策与法规研究报告
- 炊事员岗位安全培训课件
- 建筑高层风险分析方案设计
- 绩效方案咨询
- 鄂州挡土墙施工方案编制
- 建筑方案设计参赛感言范文
- 宁波水平钢支撑施工方案
- 12级家园建筑方案设计
- 《装配式综合管廊施工及验收标准》
- 罗湖区-空气质量状况及原因分析
- 2013版电力建设工程概预算定额宣贯讲义
- 汽车吊装t梁施工方案(终)
- 【七年级上】书法教案
- 《水循环》-完整版课件
- 轮胎印痕分析与运用课件
- 库房温湿度记录表
- 10KV电力安全工器具试验报告
- (精选word)英语四线格(a4打印)
- 家谱模板,树形图(绝对精品,一目了然)
评论
0/150
提交评论