Java程序设计第四章流程控制2学习目标理解程序控制的概念运用条件语句,使用if,switch来控制程序的不同执行路径掌握for、while和do句型结构控制程序的循环执行理解并能应用break和continue调整程序中的流程控制结构。理解分支和循环的影响语句范围理解变量的生存范围理解并使用断言对程序进行调试3程序程序表现为完成某个功能(目标)而编写的指令集合。构成程序的基本元结构是顺序、分支和循环在整体上,程序运行是按照事先编写的指令(语句)从前到后的顺序执行,但在执行的过程中,经常会遇到基于不同条件的决策来执行不同的指令,抑或重复执行事先定义的指令来达到某种目的,但总体上程序总是顺序执行的。4一个例子编写一个程序,声明3个整型变量,用来保存3个学生的考试分数,计算他们的平均分(float类型)并输出。inta=0,b=0,c=0;a=???;b=???;c=???;aver=(a+b+c)/3;输出aver;5进一步的如果某个学生的成绩低于60分,则不参与平均分计算。inta=0,b=0,c=0;a=???;b=???;c=???;输出aver;a=60b=60c=60sum=sum+a;n++;sum=sum+b;n++;sum=sum+c;n++;aver=sum/nintsum=0,n=0;YYYY6在进一步如果有50个学生的成绩已经保存在一个整型数组中,同样基于上面规则来计算这批学生的平均分。Int[]a=newint[50];保存成绩到数组intsum=0,n=0;intx=0;输出aver;a[x]=60sum=sum+a[x];n++;aver=sum/nNYNx++x=50Y74.1句、块和空白构成Java程序的最小单位是类,而类则是由属性和方法构成。方法代表了某个具体的能力,具体的一个方法就是由为完成某个功能而编写的若干条语句组成。84.1.1语句在Java编程语言中,语句是一行由分号(;)终止的代码,它是一个完整的可执行单元。例如:totals=a+b+c+d+e+f;与下式相同total=a+b+c+d+e+f;9在Java中,主要有以下的语句类型声明语句inta=0;//声明了一个整型变量Studentstu;//声明了一个类型是Student的对象表达式语句赋值表达式,自增表达式、方法调用、对象创建都可以和分号一起构成“表达式语句”System.out.println(“Welcome”);//输出字符串a=Math.abs(-3.1);//返回绝对值value=100;//为变量赋值a++;//a自增Studentstu=newStudent(“张华”);//创建一个Student类的实例,实例引用名为stu控制语句104.1.2语句块一个块(block)或一个复合语句是以上括号和下括号为边界的语句集合;块语句也被用来组合属于某个类的语句。语句块可被嵌套。//ablock语句{x=y+1;y=x+1;}11//类声明所包含的块语句publicclassMyDate{intday;intmonth;intyear;}12//一个嵌套块语句的例子while(ilarge){//循环语句快开始,用{表示a=a+i;if(a==max){//判断语句快开始,用{表示b=b+a;a=0;}//判断语句块结束,用}表示}//循环语句快结束,用}表示134.1.3空白在源代码元素之间允许空白,空白的数量不限。空白(包括空格、tabs和新行)可以改善源代码的视觉感受。{intx;x=23+54;}{intxx=23+54;}144.2顺序结构顺序结构程序语句间最简单的结构关系是顺序结构,也就是语句是按照它们在方法中出现的先后顺序逐一被执行。publicclassSwap{publicstaticvoidmain(String[]args){inta=10,b=20;intt=0;t=a;a=b;b=t;System.out.println(a=+a);System.out.println(b=+b);}}154.3选择结构程序控制可以定义为对程序语句的执行顺序进行的规定。Java提供了条件语句在两种或更多的情况做出选择,根据情况执行不同的程序语句;164.3.1条件判断与决策1if,else语句简单的单分支语句if(布尔表达式){语句或块;}例如if(score60){System.out.println(“下次努力哦!”);}174.3.1条件判断与决策(cont.)简单的双分支语句if(布尔表达式){语句或块;}else{语句或块;}例如if(score60){System.out.println(“下次努力哦!”);}else{System.out.println(“恭喜你通过考试!”);}18expBAFT选择结构194.3.1条件判断与决策(cont.)嵌套的if,elseif(布尔表达式1){语句或块;}elseif(布尔表达式2){语句或块;}else{语句或块;}20例如if(score60){System.out.println(“下次努力哦!”);}elseif(score80){System.out.println(“恭喜你通过考试!”);}else{System.out.println(“你考的很棒!”);}21课堂练习(c.)指出输出结果x=2;y=3;if(x2){if(y2){intz=x+y;System.out.println(“zis”+z);}}elseSystem.out.println(“xis”+x);224.3.1条件判断与决策(cont.)2switch语句switch语句允许程序员更多情况下选择不同的程序逻辑,当情况发生时,按照事先准备好的方法执行。switch语句的句法是:switch(expr1){caseexpr2:statements;break;caseexpr3:statements;break;default:statements;}23chargender;//性别…….switch(gender){case‘F’:case‘f’:System.out.println(”女性“);break;case‘M’:case‘m’:System.out.println(”男性“);break;}24表达式的类型在switch(expr1)语句中,expr1必须与int类型是赋值兼容的;byte,short或char类型可被升级;不允许使用浮点或long表达式。从7开始,增加了String类型。在switch(expr1)语句中,expr1也可以是枚举类型publicenumMonth{JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER}breakbreak的作用是停止switch的执行,退出,执行switch代码段后的程序。如果没有break语句作为某一个case代码段的结束句,则程序的执行将继续到下一个case,而不检查case表达式的值。25TA1Fexp=1TA2Fexp=2…TAnFexp=n多分支结构26课堂练习指出输出结果x=2;y=3;if(x2)if(y2){intz=x+y;System.out.println(“zis”+z);}elseSystem.out.println(“xis”+x);27课堂练习(c.)执行下列switch语句后y是多少?x=3;switch(x+3){case6:y=1;default:y+=1;}switch中的default本质是一种特殊匹配变量或表达式的值不能与任何case值相匹配时,可选缺省符(default)指出了应该执行的程序代码。位置default语句一般在switch语句的最后。注意如果匹配到了default,并且default后还有其他的case,则继续执行,且忽略是否匹配2829课堂练习(c.)有一个函数如下,根据指定的x,输出y值y=Xx12X-11=x103X-11x=10写出程序,根据给出的百分制成绩,输出成绩等级’A’、’B’、’C’、’D’、’E’,90分以上为A,80~89为B,70~79为C,60~69为D,60分以下为E。30课堂练习(c.)编写一个程序,根据命令行参数将对应的mon、tue、wed、thu、fri、sat、sun分别输出为星期一、星期二….星期日,如:JavaWeekDaymon星期一31思考题如何提高多分支下的程序执行效率?324.4循环循环语句使语句或块的执行得以重复进行。Java编程语言支持三种循环构造类型:for,while和do循环。for和while循环是在执行循环体之前测试循环条件do循环是在执行完循环体之后测试循环条件。这就意味着for和while循环可能连一次循环体都未执行,而do循环将至少执行一次循环体。33FSTexp直到型循环当型循环TexpSF34for循环的句法是:for(init_expr;booleantestexpr;alter_expr){statementorblock}例如:for(inti=0;i10;i++){System.out.println(i=+i);}35while循环的句法:while(布尔表达式){语句或块}inti=0;while(i10){System.out.println(i=+i);i++;}System.out.println(Finally!);36do循环的句法是:do{语句或块;}while(布尔测试)inti=0;do{System.out.println(i=+i);i++;}while(i10);System.out.println(Finally!);37思考题怎么决定使用哪类循环?38循环的嵌套在一个循环体内又包含了另一个完整的循环结构,成为嵌套循环。如:while(循环条件){[语句;]while(循环条件){[语句;]}[语句;]}394.4.4跳转下列语句可被用在更深层次的控制循环语句中:break[标注];continue[标注];label:语句;Label:被用来标识循环构造的复合语句。break语句被用来从switch语句、for语句等循环语句的块中退出到预先设定的label处。当程序运行到break[标注]处时,程序跳出整个循环体的结尾处。continue语句被用来略过并跳到循环体的结尾。当程序运行到continue[标注]处时,程序跳至标识外循环的下一次循环开始处继续执行。40loop:while(true){for(inti=0;i100;i++){switch(c=System.in.read()){case-1:case`\n`://跳到最后处breakloop;....}}//endfor}//endwhile41课堂练习下面的循环程序输出结果是什么?publicclassShowErrors{publicstaticvoidmain(String[]args){for(inti=0;i10;i++);System.out.println(i+4);}}42课堂练习(c.)编写一个程序,求出1+2+3+…+100的和并输出。求出100-200间的所有素数。43用下面的方法声明,编写一个java方法,返回接收字符数组中连续字符块的个数:publicstaticintcountRuns(char[]A)444.5变量的作用域每个变量都有一个作用域,就是说这个变量在哪个程序段中起作用。变量的作用域从它被声明时开始直到遇到声明变量的代码段的结束符“}”为止。只能在