Java第3章程序流程控制.ppt

上传人:wuy****n92 文档编号:70797113 上传时间:2023-01-28 格式:PPT 页数:64 大小:215KB
返回 下载 相关 举报
Java第3章程序流程控制.ppt_第1页
第1页 / 共64页
Java第3章程序流程控制.ppt_第2页
第2页 / 共64页
点击查看更多>>
资源描述

《Java第3章程序流程控制.ppt》由会员分享,可在线阅读,更多相关《Java第3章程序流程控制.ppt(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章程序流程控制 内容提要流程控制是所有编程语言的基本功能,它们主要用来控制程序中各语句的执行顺序。在Java语言中最主要的流程控制方式是结构化程序设计中规定的三种基本控制结构,即顺序结构、分支结构和循环结构。本章要点顺序结构比较简单,它的执行过程是从所描述的第一个操作开始,按顺序依次执行后续的操作,直到序列的最后一个操作。前面的例子都是顺序结构的。本章主要讨论分支结构和循环结构。3.1分支结构 3.1.1 if语句结构 3.1.2 条件运算符3.1.3 switch语句结构3.1.1 if语句结构1.单分支结构if-else结构是最常用的分支结构,它可以实现单分支和双分支结构。单分支if结

2、构的一般格式如下:if(condition)statements;3.1.1 if语句结构其中condition为布尔表达式,它的值为true或false。程序执行的流程是:首先计算condition表达式的值,若其值为true,则执行statements语句序列,否则转去执行if结构后面的语句,如图3.1所示。图3.1 单分支结构条件falsetruestatements3.1.1 if语句结构编写程序,从键盘上读取一个整数,检查该数是否能同时被5和6整除,是否能被5或被6整除,是否只能被5或只能被6整除。程序3.1 CheckNumber.java 3.1.1 if语句结构2.双分支双分支

3、结结构构双分支的if结构的一般格式如下:if(condition)statements1;else statements2;3.1.1 if语句结构该结构的执行流程是:首先计算condition的值,如果为true,则执行statements1语句序列,否则执行statements2语句序列。如图3.2所示。当if或else部分只有一条语句时,大括号可以省略,但推荐使用大括号。图3.2 双分支结构false条件statements1trueStatements23.1.1 if语句结构下面的程序要求从键盘上输入一个年份,输出该年是否是闰年。符合下面两个条件之一的年份即为闰年:能被4整除,但不能

4、被100整除;能被400整除。程序3.2 LeapYear.java程序程序输输出出结结果果为为:请输入年份:2013 2013年不是闰年。3.1.1 if语句结构3.阶梯式ifelse结构如果程序逻辑需要多个选择,可以在if语句中使用一系列的else语句,这种结构有时称为阶梯式ifelse结构。下面程序要求输入学生的百分制成绩,打印输出等级的成绩。等级规定为,90分(包括)以上的为“优秀”,80分(包括)以上的为“良好”,70分(包括)以上的为“中等”,60分(包括)以上的为“及格”,60分以下为“不及格”。3.1.1 if语句结构程序3.3 ScoreGrade.java 3.1.2 条件

5、运算符条件运算符(conditional operator)的格式如下 condition?expr1:expr2因为有三个操作数,又称为三元运算符。这里condition为关系或逻辑表达式,其计算结果为布尔值。如果该值为true,则计算表达式expr1的值,并将计算结果作为整个条件表达式的结果;如果该值为false,则计算表达式expr2的值,并将计算结果作为整个条件表达式的结果。3.1.2 条件运算符条件运算符可以实现ifelse结构。例如,若max,a,b是int型变量,下面结构:if(a b)max=a;else max=b;3.1.2 条件运算符用条件运算符表示为:max=(a b)

6、?a:b;从上面可以看到使用条件运算符会使代码简洁,但是不容易理解。现代的编程,程序的可读性变得越来越重要,因此推荐使用ifelse结构,毕竟并没有多输入多少代码。3.1.3 switch语句结构如果需要从多个选项选择其中一个,可以使用switch语句。switch语句主要实现多分支结构,一般格式如下:switch(expression)case value1:statements break;case value2:statements break;3.1.3 switch语句结构case valuen:statements break;default:statements其中express

7、ion是一个表达式,它的值必须是byte、short、int、char、enum类型或String类型。case子句用来设定每一种情况,后面的值必须与表达式值类型相容。程序进入switch结构,首先计算3.1.3 switch语句结构expression的值,然后用该值依次与每个case中的常量(或常量表达式)的值进行比较,如果等于某个值,则执行该case子句中后面的语句,直到遇到break语句为止。break语句的功能是退出switch结构。如果在某个情况处理结束后就离开switch结构,则必须在该case结构的后面加上break语句。3.1.3 switch语句结构default子句是可选

8、的,当表达式的值与每个case子句中的值都不匹配时,就执行default后的语句。如果表达式的值与每个case子句中的值都不匹配,且又没有default子句,则程序不执行任何操作,而是直接跳出switch结构,执行后面的语句。编写程序,从键盘输入一个年份(如2000年)和一个月份(如2月),输出该月的天数(29)。3.1.3 switch语句结构程序3.4 SwitchDemo.java3.1.3 switch语句结构在Java SE 7中,可以在switch语句的表达式中使用String对象,下面代码根据月份的字符串名称输出数字月份。3.1.3 switch语句结构程序3.5 StringS

9、witchDemo.java程序中month.toLowerCase()是将字符串转换成小写字符串。switch表达式中的字符串与每个case中的字符串进行比较。3.2循环结构在程序设计中,有时需要反复执行一段相同的代码,这时就需要使用循环结构来实现。Java语言提供了4种循环结构:whilewhile循循环环do-whiledo-while循循环环forfor循循环环增增强强的的forfor循循环环3.2循环结构一般情况下,循环结构包含4部分内容:初始化部分:设置循环开始时的程序状态。初始化部分:设置循环开始时的程序状态。循环条件:循环条件一般是一个布尔表达式,循环条件:循环条件一般是一个布

10、尔表达式,当表达式的值为当表达式的值为truetrue时执行循环体,为时执行循环体,为falsefalse时退时退出循环。出循环。迭代部分:改变变量的状态。迭代部分:改变变量的状态。循环体部分:需要重复执行的代码。循环体部分:需要重复执行的代码。3.2.1 while循环结构while循环是Java最基本的循环结构,这种循环是在某个条件为true时,重复执行一个语句或语句块。它的一般格式如下:initializationwhile(boolean_expression)/循环体 iteration3.2.1 while循环结构其中,initialization 为初始化部分,boolean_e

11、xpression为一个布尔表达式,它是循环条件。中间的部分为循环体,用一对大括号定界。iteration为迭代部分。3.2.1 while循环结构图3.3 while循环结构循环体truefalse条件该循环首先判断循环条件,当条件为true时,一直反复执行循环体。这种循环一般称为“当循环”。一般用在循环次数不确定的情况下。while循环的执行流程如图3.3所示。3.2.1 while循环结构下面代码使用while结构求1到100之和。int n=1;int sum=0;while(n=100)sum=sum+n;n=n+1;System.out.println(sum=+sum);/输出s

12、um=50503.2循环结构程序3.6采用while循环结构,计算下面级数之和:程序3.6 SeriesSum.java 程序输出结果为:3.2循环结构下面的程序随机产生一个100200之间的整数,用户从键盘上输入所猜的数,程序显示是否猜中的消息,如果没有猜中要求用户继续猜,直到猜中为止。程序3.7 GuessNumber.java3.2.2 do-while循环结构程序中使用了类的random()方法,该方法返回一个0.0到1.0(不包括1.0)之间的double型的随机数。程序中该方法乘以101再转换为整数,得到0到100之间的整数,再加上100,则magic的范围就为100到200之间的

13、整数。3.2.2 do-while循环结构do-while循环一般格式如下:initialization do /循环体 iteration while(termination);do-while循环执行过程如图3.4所示。图3.4 do-while循环结构循环体truefalse条件3.2.2 do-while循环结构该循环首先执行循环体,然后计算条件表达式。如果表达式的值为true,则返回到循环的开始继续执行循环体,直到termination的值为false循环结束。这种循环一般称为“直到型”循环。该循环结构与while循环结构的不同之处是,do-while循环至少执行一次循环体。3.2.

14、2 do-while循环结构编写程序,要求用户从键盘输入若干个double型数(输入0则结束),程序计算并输出这些数的总和与平均值。程序3.8 DoWhileDemo.java3.2.3 for循环结构for循环是Java语言中4种循环结构中功能最强,也是使用最广泛的循环结构。它的一般格式如下:for(initialization;termination;iteration)/循环体 3.2.3 for循环结构在for循环中,initialization为循环的初始化部分,termination为循环的条件,iteration为迭代部分,三部分需用分号隔开。for循环开始执行时首先执行初始化部

15、分,该部分在整个循环中只执行一次。在这里可以定义循环变量并赋初值,可以定义多个循环变量,中间用逗号分隔,这里也是Java语言唯一可以使用逗号运算符的地方。3.2.3 for循环结构接下来判断循环的终止条件,若为true则执行循环体部分,否则退出循环。当循环体执行结束后,程序控制返回到迭代部分,执行迭代,然后再次判断终止条件,若为true则反复执行循环体。3.2.3 for循环结构在初始化部分可以声明多个变量,它们的作用域在循环体内,如下面循环中声明了两个变量i和j。for(int i=0,j=10;i j;i+,j-)System.out.println(i=+i+,j=+j);for循环中的

16、一部分或全部可为空,循环体也可为空,但分号不能省略,如:for(;)3.2.3 for循环结构for循环和while循环及dowhile循环有时可相互转换,例如有下面的for循环:for(int i=0,j=10;i j;i+,j-)System.out.println(i=+i+,j=+j);可以转换为下面等价的while循环结构。3.2.3 for循环结构int i=0,j=10;while(i j)System.out.println(i=+i+,j=+j);i+;j-;提示:在Java 5中增加了一种新的循环结构,称为增强的for循环,它主要用于对数组和集合对象的元素迭代。关于增强的f

17、or循环在节中讨论。3.2.4 循环结构的嵌套在一个循环结构的循环体中可以嵌套另一个完整的循环结构,称为循环的嵌套。内嵌的循环还可以嵌套循环,这就是多层循环。同样,在循环体中也可以嵌套另一个选择结构。下面程序打印输出九九乘法表,这里使用了循环的嵌套。3.2.4 循环结构的嵌套程序3.9 NineTable.java3.2.4 循环结构的嵌套程序输出结果为:1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=2

18、4 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=813.2.5 break语句和continue语句在Java循环体中可以使用continue语句和break语句。1.break语句break语句是用来跳出while、do、for或switch结构的执行,该语句有两种格式:break;bre

19、ak lable;3.2.5 break语句和continue语句break语句的功能是结束本次循环,控制转到其所在循环的后面执行。对各种循环均直接退出,不再计算循环控制表达式。下面程序演示了break语句的使用。程序3.10 BreakDemo.java程序输出结果为:n=21 sum=1213.2.5 break语句和continue语句使用break语句只能跳出当前的循环体。如果程序使用了多重循环,又需要从内层循环跳出或者从某个循环开始重新执行,此时可以使用带标签的break。考虑下面代码:3.2.5 break语句和continue语句start:for(int i=0;i 3;i+)

20、for(int j=0;j 4;j+)if(j=2)break start;System.out.println(i+:+j);这里,标签start用来标识外层的for循环,因此语句break start;跳出了外层循环。3.2.5 break语句和continue语句2.continue语句continue语句与break语句类似,但它只终止执行当前的迭代,导致控制权从下一次迭代开始。该语句有下面两种格式:continue;continue label;以下代码会输出09之间的数字,但不会输出5。3.2.5 break语句和continue语句for(int i=0;i 10;i+)if(i

21、=5)continue;System.out.println(i);当i等于5时,if语句的表达式运算结果为true,使得continue语句得以执行。因此,后面的的输出语句不能执行,控制权从下一次循环处继续,即i等于6的时候。continue语句也可以带标签,用来标识从那一层循环继续执行。下面是使用带标签的continue语句的例子。3.2.5 break语句和continue语句start:for(int i=0;i 3;i+)for(int j=0;j 4;j+)if(j=2)continue start;System.out.println(i+:+j);运行结果:0:00:11:01

22、:12:02:13.2.5 break语句和continue语句注意:(1)带标签的break可用于循环结构和带标签的语句块,而带标签的continue只能用于循环结构。(2)标签命名遵循标识符的命名规则,不相互包含的块名字可相同。(3)带标签的break和continue语句不能跳转到不相关的标签块。提示:在C/C+语言中可以使用goto语句从内层循环跳到外层循环,但是在Java语言尽管将goto作为关键字,但不能使用,也没有意义。3.2.5 break语句和continue语句下面的程序在循环体中使用了带标签的break语句和continue语句。程序3.11 LabelDemo.java

23、程序输出结果为:i=0 1 2 4 5 7 8 10 11 13 14 16 17 19 Loop Finish3.2.5 break语句和continue语句该程序在执行内层循环时,当j的值为20时,执行break outer;程序结束outer循环,若j能被3整除,返回到内层循环的迭代处继续执行。3.3案例研究 一位数加法练习程序3.3.2 任意抽取一张牌3.3.3 求最大公约数3.3.4 打印输出若干素数3.3.5 打印一年的日历3.3.1 一位数加法练习程序为一年级小学生编写一位数加法运算练习程序。程序开始运行随机生成两个一位数,让学生输入计算结果,程序给出结果是否正确。程序3.12

24、AdditionQuiz.java3.3.2 任意抽取一张牌从一副纸牌中任意抽取一张,并打印出抽取的是哪一张牌。我们知道,一副牌有4种花色,黑桃、红桃、方块和梅花。每种花色有13张牌,共有52张牌。我们可以将这52张牌编号,从0到51。规定编号0到12为黑桃,13到25为红桃,26到38为方块,39到51为梅花。可以使用整数的除法运算来确定是哪一种花色,用求余数运算确定是哪一张牌。例如,假设抽出的数是n,计算n/13的结果,若为0,则牌的花色为黑桃,若为1,则牌的花色为红桃,若为2,则牌的花色为方块,若为3,则牌的花色为梅花。计算n%13的结果可得到第几张牌。3.3.2 任意抽取一张牌程序3.

25、13 PickCards.java3.3.3 求最大公约数两个整数的最大公约数(Greatest Common Divisor,GCD)是能够同时被两个数整除的最大整数。例如,4和2的最大公约数是2,16和24的最大公约数是8。求两个整数的最大公约数有多种方法。一种方法是,假设求两个整数m和n的最大公约数,显然1是一个公约数,但它可能不是最大的。我们可以依次检查k(k=2,3,4,)是否是m和n的最大公约是,直到k大于m或n为止。3.3.3 求最大公约数程序3.14 GCD.java3.3.3 求最大公约数计算两个整数m与n的最大公约数还有一个更有效的方法,称为辗转相除法或称欧几里得算法,其基

26、本步骤如下:计算r=m%n,若r=0,则n是最大公约数。若r!=0,执行m=n,n=r,再次计算r=m%n,直到r=0为止,最后一个n即为最大公约数。请读者自行编写程序实现上述算法。3.3.4 打印输出若干素数下面的程序计算并输出前50个素数,每行输出10个。程序3.15 PrimeNumber.java3.3.5 打印一年的日历编写程序提示用户从键盘输入一个年份(如2013)和该年第一天是星期几,星期用数字表示,0表示星期日,1表示星期一等。程序打印该年的每月的月历。如下所示。January 2013-SunMon TueWed ThuFriSat12345678910111213 1415

27、1617181920 21222324252627 282930313.3.5 打印一年的日历程序要求输入的年份用于计算是否是闰年(二月份有29天),程序用变量startDay记录1月1日是星期几,然后使用下面表达式计算其他月1日是星期几。(startDay+daysOfMonth)%7程序3.16 PrintCalendar.java运行该程序输入年2013,输入星期2(2013年1月1日是星期二)可以输出2013年每月日历。3.4 小 结分支结构和循环结构是结构化程序设计的两种重要程序流程控制结构。分支结构可以通过if-else和switch实现,循环结构包括while循环、do-while循环、for循环和增强的for循环。分支结构和循环结构可以相互嵌套。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁