《Java程序设计-3-流程控制hdl.pptx》由会员分享,可在线阅读,更多相关《Java程序设计-3-流程控制hdl.pptx(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、JavaJava程序设计程序设计第三章第三章 流程控制流程控制1理解程序控制的概念理解程序控制的概念运用条件语句,使用运用条件语句,使用if,switchif,switch来控制程序的不同执来控制程序的不同执行路径行路径掌握掌握forfor、whilewhile和和dodo句型结构控制程序的循环执行句型结构控制程序的循环执行理解并能应用理解并能应用breakbreak、continuecontinue和和returnreturn调整程序中调整程序中的流程控制结构。的流程控制结构。理解并使用断言对程序进行调试理解并使用断言对程序进行调试掌握掌握JavaJava语言中不同注释形式的区别语言中不同注
2、释形式的区别掌握利用掌握利用ScannerScanner类实现基本的输入方法类实现基本的输入方法理解并能使用理解并能使用System.outSystem.out对象中的不同输出方法对象中的不同输出方法掌握基本的编程技巧。掌握基本的编程技巧。2程序程序程序表现为完成某个功能程序表现为完成某个功能(目标目标)而编写的指令而编写的指令集合。集合。在整体上,程序运行是按照事先编写的指令在整体上,程序运行是按照事先编写的指令(语语句句)从前到后的顺序执行,但在执行的过程中,从前到后的顺序执行,但在执行的过程中,经常会遇到基于不同条件的决策来执行不同的经常会遇到基于不同条件的决策来执行不同的指令,抑或重复
3、执行事先定义的指令来达到某指令,抑或重复执行事先定义的指令来达到某种目的,但总体上程序总是顺序执行的。种目的,但总体上程序总是顺序执行的。3一个例子一个例子编写一个程序,声明编写一个程序,声明3 3个整型变量,用来保存个整型变量,用来保存3 3个学生的考试分数,计算他们的平均分个学生的考试分数,计算他们的平均分(float(float类型类型)并输出。并输出。4进一步的进一步的u如果某个学生的成绩低于如果某个学生的成绩低于6060分,则不参与平均分分,则不参与平均分计算。计算。5在进一步在进一步u如果有如果有5050个学生个学生的成绩已经保存的成绩已经保存在一个整型数组在一个整型数组中,同样基
4、于上中,同样基于上面规则来计算这面规则来计算这批学生的平均分。批学生的平均分。63.1 3.1 句、块和空白句、块和空白构成构成JavaJava程序的最小单位是类,而类则是由属程序的最小单位是类,而类则是由属性和方法构成。方法代表了某个具体的能力,性和方法构成。方法代表了某个具体的能力,具体的一个方法就是由为完成某个功能而编写具体的一个方法就是由为完成某个功能而编写的若干条语句组成。的若干条语句组成。73.1.1 3.1.1 语句语句在在JavaJava编程语言中,语句是一行由分号编程语言中,语句是一行由分号(;)(;)终止的终止的代码,它是一个完整的可执行单元。代码,它是一个完整的可执行单元
5、。例如例如utotals=a+b+c+d+e+ftotals=a+b+c+d+e+f;与下式相同与下式相同u total=a+b+c+total=a+b+c+u d+e+f;d+e+f;8在在JavaJava中,主要有以下的语句类型中,主要有以下的语句类型 u声明语句声明语句uint a=0;/int a=0;/声明了一个整型变量声明了一个整型变量uStudent stu;/Student stu;/声明了一个类型是声明了一个类型是StudentStudent的对象的对象u表达式语句表达式语句 u赋值表达式,自增表达式、方法调用、对象创建都可以和分号一赋值表达式,自增表达式、方法调用、对象创建
6、都可以和分号一起构成起构成“表达式语句表达式语句”uSystem.out.println(“Welcome”);/System.out.println(“Welcome”);/输出字符串输出字符串ua=Math.abs(-3.1);/a=Math.abs(-3.1);/返回绝对值返回绝对值uvalue=100;/value=100;/为变量赋值为变量赋值ua+;/aa+;/a自增自增uStudent stu=new Student(“Student stu=new Student(“张华张华”);/”);/创建一个创建一个StudentStudent类的实例,实例引用名为类的实例,实例引用名为
7、stustuu控制语句控制语句93.1.2 3.1.2 语句块语句块一个块一个块(block)(block)或一个复合语句是以上括号和或一个复合语句是以上括号和下括号下括号 为边界的语句集合;为边界的语句集合;块语句也被用来组合属于某个类的语句。块语句也被用来组合属于某个类的语句。语句块可被嵌套。语句块可被嵌套。/a block/a block 语句语句 u u x=y+1;x=y+1;u y=x+1;y=x+1;u 10/类声明所包含的块语句类声明所包含的块语句 upublic class MyDate public class MyDate u int day;int day;u int
8、month;int month;u int year;int year;u 11/一个嵌套块语句的例子一个嵌套块语句的例子while(i large)/循环语句快开始,用循环语句快开始,用表示表示 a=a+i;if(a=max)/判断语句快开始,用判断语句快开始,用表示表示 b=b+a;a=0;/判断语句块结束,用判断语句块结束,用表示表示 /循环语句快结束,用循环语句快结束,用表示表示123.1.33.1.3空白空白在源代码元素之间允许空白,空白的数量不限。空白在源代码元素之间允许空白,空白的数量不限。空白(包括空格、包括空格、tabstabs和新行和新行)可以改善源代码的视觉感受。可以改善
9、源代码的视觉感受。u uint x;int x;ux=23+54;x=23+54;u u u int x int xu x =23 +54;x =23 +54;u 133.23.2逻辑判断和循环控制逻辑判断和循环控制程序控制可以定义为对程序语句的执行顺序进程序控制可以定义为对程序语句的执行顺序进行的规定。行的规定。JavaJava提供了条件语句在两种或更多的情况中做提供了条件语句在两种或更多的情况中做出选择,根据情况执行不同的程序语句;出选择,根据情况执行不同的程序语句;JavaJava也提供了更有效的循环语句以控制那些需也提供了更有效的循环语句以控制那些需要重复执行的语句。要重复执行的语句。
10、143.2.1 3.2.1 条件判断与决策条件判断与决策 1 if,else1 if,else语句语句简单的单分支语句简单的单分支语句uif(if(布尔表达式布尔表达式)u 语句或块;语句或块;u例如例如uif(score 60)if(score 60)u System.out.println(“System.out.println(“下次努力哦下次努力哦!”);!”);u 153.2.1 3.2.1 条件判断与决策条件判断与决策(cont.)(cont.)简单的双分支语句简单的双分支语句uif(if(布尔表达式布尔表达式)u 语句或块;语句或块;u else else u 语句或块;语句或块
11、;u 例如例如uif if(score 60score 60)u System.out.println(“System.out.println(“下次努力哦下次努力哦!”);!”);uelseelseu System.out.println(“System.out.println(“恭喜你通过考试恭喜你通过考试!”);!”);u 16expBAFT选择结构选择结构173.2.1 3.2.1 条件判断与决策条件判断与决策(cont.)(cont.)嵌套的嵌套的 if,else if,elseuif(if(布尔表达式布尔表达式1)1)u 语句或块;语句或块;uelse else if(if(布尔表
12、达式布尔表达式2)2)u 语句或块;语句或块;u elseelseu 语句或块;语句或块;u 18例如例如if(score 60)System.out.println(“下次努力哦下次努力哦!”);else if(score 2)if(y 2)int z=x+y;System.out.println(“z is”+z);else System.out.println(“x is”+x);24课堂练习课堂练习(c.)(c.)指出输出结果指出输出结果 x=2;y=3;if(x 2)if(y 2)int z=x+y;System.out.println(“z is”+z);else System.o
13、ut.println(“x is”+x);25课堂练习课堂练习(c.)(c.)执行下列执行下列switchswitch语句后语句后y y是多少?是多少?u x=3;x=3;u switch(x+3)switch(x+3)u case 6:y=1;case 6:y=1;u default:y+=1;default:y+=1;u 26课堂练习课堂练习(c.)(c.)有一个函数如下,根据指定的有一个函数如下,根据指定的x x,输出,输出y y值值uy=y=X x12X-1 1=x=10写出程序,根据给出的百分制成绩,输出成绩等写出程序,根据给出的百分制成绩,输出成绩等级级AA、B B、C C、D D
14、、E,90 E,90分以上为分以上为A A,80808989为为B B,70707979为为C C,60606969为为D D,6060分以下为分以下为E E。27课堂练习课堂练习(c.)(c.)编写一个程序,根据命令行参数将对应的编写一个程序,根据命令行参数将对应的1 1、2 2、3 3、4 4、5 5、6 6、7 7分别输出为星期一、星期二分别输出为星期一、星期二.星期日,如:星期日,如:uJava WeekDay 1Java WeekDay 1u星期一星期一28思考题思考题如何提高多分支下的程序执行效率?如何提高多分支下的程序执行效率?293.2.2 3.2.2 循环循环循环语句使语句或
15、块的执行得以重复进行。循环语句使语句或块的执行得以重复进行。JavaJava编程语言支持三种循环构造类型:编程语言支持三种循环构造类型:for,for,whilewhile和和do do 循环。循环。uforfor和和whilewhile循环是在执行循环体之前测试循环条循环是在执行循环体之前测试循环条件件udo do 循环是在执行完循环体之后测试循环条件。循环是在执行完循环体之后测试循环条件。u这就意味着这就意味着forfor和和whilewhile循环可能连一次循环体都循环可能连一次循环体都未执行,未执行,而而dodo循环将至少执行一次循环体。循环将至少执行一次循环体。30FSTexp直到型
16、循环直到型循环当型循环当型循环TexpSF31forfor循环的句法是:循环的句法是:u for(init_expr;boolean testexpr;alter_expr)for(init_expr;boolean testexpr;alter_expr)ustatement or blockstatement or blocku u 例如:例如:ufor(int i=0;i 10;i+)for(int i=0;i 10;i+)uSystem.out.println(i=+i);System.out.println(i=+i);u 32增强的增强的forfor循环循环public class
17、 ForEnhancedDemo public static void main(String args)int arrayOfInts=32,87,3,589,12,1076,2000,8,622,127;for(int element:arrayOfInts)System.out.print(element+);System.out.println();33whilewhile循环的句法:循环的句法:uwhile (while (布尔表达式布尔表达式)u 语句或块语句或块 uint i=0;while(i 10)System.out.println(i=+i);i+;System.out.
18、println(Finally!);34dodo循环的句法是:循环的句法是:udo do u 语句或块;语句或块;uwhile(while(布尔测试布尔测试)int i=0;do System.out.println(i=+i);i+;while(i 10);System.out.println(Finally!);35思考题思考题怎么决定使用哪类循环?怎么决定使用哪类循环?36循环的嵌套循环的嵌套在一个循环体内又包含了另一个完整的循环结在一个循环体内又包含了另一个完整的循环结构,成为嵌套循环。如构,成为嵌套循环。如:while(循环条件)(循环条件)语句;语句;while(循环条件)(循环条
19、件)语句;语句;语句;语句;373.2.3 3.2.3 跳转跳转下列语句可被用在更深层次的控制循环语句中:下列语句可被用在更深层次的控制循环语句中:ubreak break 标注;标注;ucontinuecontinue标注;标注;ulabel:label:语句;语句;Label:Label:被用来标识循环构造的复合语句。被用来标识循环构造的复合语句。breakbreak语句被用来从语句被用来从switchswitch语句、语句、forfor语句等循环语句等循环语句的块中退出到预先设定的语句的块中退出到预先设定的labellabel处。当程序处。当程序运行到运行到break break 标注处
20、时,程序跳出整个循环标注处时,程序跳出整个循环体的结尾处。体的结尾处。continuecontinue语句被用来略过并跳到循环体的结尾。语句被用来略过并跳到循环体的结尾。当程序运行到当程序运行到continue continue 标注处时,程序跳标注处时,程序跳至标识外循环的下一次循环开始处继续执行。至标识外循环的下一次循环开始处继续执行。38loop:while(true)for(int i=0;i 100;i+)switch(c=System.in.read()case-1:case n :/跳到最后处跳到最后处break loop;./end for /end while 39课堂练习课
21、堂练习下面的循环程序输出结果是什么?下面的循环程序输出结果是什么?public class ShowErrors public static void main(String args)for(int i=0;i10;i+);System.out.println(i+4);40课堂练习课堂练习(c.)(c.)编写一个程序,求出编写一个程序,求出1+2+3+1001+2+3+100的和并输出。的和并输出。求出求出100100200200间的所有素数。间的所有素数。41用下面的方法声明,编写一个用下面的方法声明,编写一个javajava方法,返回接收方法,返回接收字符数组中连续字符块的个数:字符数
22、组中连续字符块的个数:upublic static int countRuns(char A)public static int countRuns(char A)42程序流程图程序流程图程序流程图也叫程序框图程序流程图也叫程序框图.程序流程图的表示以程序流程图的表示以3 3种种程序结构为基础。程序结构为基础。优点优点u历史最悠久历史最悠久,使用最广泛使用最广泛;u流程控制直观流程控制直观,容易掌握容易掌握;u至今仍广泛使用至今仍广泛使用.缺点缺点u可能诱导程序员过早考虑程序细节可能诱导程序员过早考虑程序细节,而不是逐步求精而不是逐步求精;u对于提高大型系统的可理解性作用不大;对于提高大型系统
23、的可理解性作用不大;u程序随意转移程序随意转移,导致程序结构混乱导致程序结构混乱;u无法表示数据结构无法表示数据结构.43起止起止输入输出输入输出处理处理判断判断打印输出打印输出连接连接准备准备控制流控制流磁盘文件磁盘文件换页换页循环下界循环下界循环上界循环上界程序流程图的常用符号:程序流程图程序流程图(Cont.)44SequentialABPFTABSelectivePFT BCall subroutineA盒图盒图(Box Diagram):Nassi&Shneiderman 1973年提出,又年提出,又称为称为N-S Charts。Chapin 1974年作扩充,故也年作扩充,故也称为
24、称为Chapin charts.用方框图代替传统的流程图用方框图代替传统的流程图;N-S图图45x4TFDo-Until x5ighfkx1TFbDo-Until x6ajx21cDo-While x323dek:例:例:N-S图(图(cont.)46变量的作用域变量的作用域每个变量都有一个作用域,就是说这个变量在每个变量都有一个作用域,就是说这个变量在哪个程序段中起作用。哪个程序段中起作用。变量的作用域从它被声明时开始直到遇到声明变量的作用域从它被声明时开始直到遇到声明变量的代码段的结束符变量的代码段的结束符“”“”为止。为止。只能在变量的作用域内访问它。如果在作用域只能在变量的作用域内访问
25、它。如果在作用域之外访问变量,编译器将产生一个错误。之外访问变量,编译器将产生一个错误。作用域的范围作用域的范围u成员变量成员变量u局部变量局部变量u方法参数方法参数47变量的作用域变量的作用域(c.)(c.)public class VariableScope public static void main(String args)int i=10;int k=10;System.out.println(i=+i);System.out.println(k=+k);System.out.println(i=+i);System.out.println(k=+k);48变量的作用域变量的作用域
26、(c.)(c.)可以注意到,不同作用域内的变量互相不干扰,通常变量是当前最近作用域内定义的该变量,如果要引用更大作用域外的变量,则需要增加限定符,例如我们已经看到过的this.493.33.3基本的输入输出控制基本的输入输出控制 控制台的输入控制台的输入 表表3-2 Scanner类类nextByte()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 byte。nextDouble()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 doublenextFloat()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 floatnextInt()
27、()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 intnextLine()此扫描器执行当前行,并返回跳过的输入信息此扫描器执行当前行,并返回跳过的输入信息nextLong()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 longnextShort()将输入信息的下一个标记扫描为一个将输入信息的下一个标记扫描为一个 short50Scanner reader=new Scanner(System.in);Scanner reader=new Scanner(System.in);程序程序51字符界面的输出字符界面的输出 print print uprin
28、tprint是是PrintStreamPrintStream类提供的一种输出方法,支持类提供的一种输出方法,支持booleanboolean、charchar、charchar、doubledouble、floatfloat、intint、longlong、shortshort、StringString、ObjectObject的直接输出的直接输出println println uprintlnprintln方法不同于方法不同于printprint的主要之处在于将输出信息打印的主要之处在于将输出信息打印完之后,还要写出行分割字符串,默认情况下,这个行分完之后,还要写出行分割字符串,默认情况下,
29、这个行分割字符串是割字符串是nn,即输出一个换行回车。,即输出一个换行回车。PrintfPrintfuprintfprintf则是一种格式化输出,类似于则是一种格式化输出,类似于c c语言的语言的printf()printf(),实,实现了对布局对齐和排列的支持,以及对数值、字符串和日现了对布局对齐和排列的支持,以及对数值、字符串和日期期/时间数据的常规格式和特定于语言环境的输出的支持时间数据的常规格式和特定于语言环境的输出的支持 52表3-2 主要的对应格式转换转换 参数类别参数类别 说明说明 b,B 常规常规 如果参数如果参数 arg 为为 null,则结果为,则结果为 false。如果。
30、如果 arg 是一个是一个 boolean 值或值或 Boolean,则结果,则结果为为 String.valueOf()返回的字符串。否则结果为返回的字符串。否则结果为 true。h,H 常规常规 如果参数如果参数 arg 为为 null,则结果为,则结果为 null。否则,结果为调用。否则,结果为调用 Integer.toHexString(arg.hashCode()得到的结果。得到的结果。s,S 常规常规 如果参数如果参数 arg 为为 null,则结果为,则结果为 null。如果。如果 arg 实现实现 Formattable,则调用,则调用 arg.formatTo。否则,结果为调
31、用。否则,结果为调用 arg.toString()得到的结果。得到的结果。c,C 字符字符 结果是一个结果是一个 Unicode 字符字符 d 整数整数 结果被格式化为十进制整数结果被格式化为十进制整数 o 整数整数 结果被格式化为八进制整数结果被格式化为八进制整数 x,X 整数整数 结果被格式化为十六进制整数结果被格式化为十六进制整数 e,E 浮点浮点 结果被格式化为用计算机科学记数法表示的十进制数结果被格式化为用计算机科学记数法表示的十进制数 f 浮点浮点 结果被格式化为十进制数结果被格式化为十进制数 g,G 浮点浮点 根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行
32、格式化。根据精度和舍入运算后的值,使用计算机科学记数形式或十进制格式对结果进行格式化。a,A 浮点浮点 结果被格式化为带有效位数和指数的十六进制浮点数结果被格式化为带有效位数和指数的十六进制浮点数 t,T 日期日期/时间时间 日期和时间转换字符的前缀。请参阅日期和时间转换字符的前缀。请参阅日期日期/时间转换时间转换。%百分比百分比 结果为字面值结果为字面值%(u0025)n 行分隔符行分隔符 结果为特定于平台的行分隔符结果为特定于平台的行分隔符 53public class TestPrintf public static void main(String args)int i=100;boo
33、lean status=true;String str=Welcome;System.out.printf(%d%b%s,i,status,str);54格式字符串格式字符串 产生格式化输出的每个方法都需要产生格式化输出的每个方法都需要格式字符串格式字符串 和和参参数列表数列表。格式字符串是一个。格式字符串是一个 StringString,它可以包含固,它可以包含固定文本以及一个或多个嵌入的定文本以及一个或多个嵌入的格式说明符格式说明符。请考虑以。请考虑以下示例:下示例:uCalendar c=.;String s=Calendar c=.;String s=String.format(Duk
34、es Birthday:%1$tm String.format(Dukes Birthday:%1$tm%1$te,%1$tY,c);%1$te,%1$tY,c);这里包含三个格式说明符这里包含三个格式说明符“%1$tm”“%1$tm”、“%1$te”“%1$te”和和 “%1$tY”“%1$tY”,它们指出应该如何处理参数以及在文本,它们指出应该如何处理参数以及在文本的什么地方插入它们。的什么地方插入它们。格式字符串的其余部分是包括格式字符串的其余部分是包括 Dukes Birthday:Dukes Birthday:和其他任何空格或标点符号的固定文本。和其他任何空格或标点符号的固定文本。5
35、5常规类型、字符类型和数值类型的格式说明符的语法如下:常规类型、字符类型和数值类型的格式说明符的语法如下:u%argument_index$flagswidth.precisionconversion%argument_index$flagswidth.precisionconversionu可选的可选的 argument_index argument_index 是一个十进制整数,用于表明参数在参数列表是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由中的位置。第一个参数由 1$1$引用,第二个参数由引用,第二个参数由 2$2$引用,依此引用,依此类推。类推。u可选可选 flag
36、s flags 是修改输出格式的字符集。有效标志集取决于转换类型。是修改输出格式的字符集。有效标志集取决于转换类型。u可选可选 width width 是一个非负十进制整数,表明要向输出中写入的最少字符是一个非负十进制整数,表明要向输出中写入的最少字符数。数。u可选可选 precision precision 是一个非负十进制整数,通常用来限制字符数。特定是一个非负十进制整数,通常用来限制字符数。特定行为取决于转换类型。行为取决于转换类型。u所需所需 conversion conversion 是一个表明应该如何格式化参数的字符。给定参数的是一个表明应该如何格式化参数的字符。给定参数的有效转换
37、集取决于参数的数据类型。有效转换集取决于参数的数据类型。用来表示日期和时间类型的格式说明符的语法如下:用来表示日期和时间类型的格式说明符的语法如下:u%argument_index$flagswidthconversion%argument_index$flagswidthconversion与参数不对应的格式说明符的语法如下:与参数不对应的格式说明符的语法如下:u%flagswidthconversion%flagswidthconversion 56long n=461012;long n=461012;System.out.printf(%d%n,n);System.out.printf
38、(%d%n,n);System.out.printf(%08d%n,n);System.out.printf(%08d%n,n);System.out.printf(%+8d%n,n);System.out.printf(%+8d%n,n);System.out.printf(%,8d%n,n);System.out.printf(%,8d%n,n);System.out.printf(%+,8d%n%n,n);System.out.printf(%+,8d%n%n,n);57double pi=Math.double pi=Math.PIPI;System.System.outout.printf(%f%n,pi);.printf(%f%n,pi);System.System.outout.printf(%.3f%n,pi);.printf(%.3f%n,pi);System.System.outout.printf(%10.3f%n,pi);.printf(%10.3f%n,pi);System.System.outout.printf(%-10.3f%n,pi);.printf(%-10.3f%n,pi);58演讲完毕,谢谢观看!