《运算符表达式和语句.ppt》由会员分享,可在线阅读,更多相关《运算符表达式和语句.ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 运算符、表达式运算符、表达式和语句和语句2.3语句与流程控制语句是java程序的基本组成部分,可以分成如下几类:1.声明创建语句:声明创建语句:例如,String name=“Zhangsan”;int age=24;2.表达式语句表达式语句 例如,a=b+(c-d);/赋值语句3.方法调用语句方法调用语句 System.out.print(“Hello”);2.3语句与流程控制4复合语句复合语句 由一对花括号把几个语句括起来,这样就构成了复合语句。复合语句内可以定义变量,但这些变量是局部变量。变量声明语句;/变量的作用范围(域)只在其 语句1;/所在的一对花括号内 语句2;2.
2、3语句与流程控制5流程控制语句流程控制语句l通常,通常,Java程序中的语句是按顺序执行(从上到下)。程序中的语句是按顺序执行(从上到下)。lJava中的中的控制语句控制语句控制程序执行的走向,包括控制程序执行的走向,包括分支分支(选择)语句、循环语句和转移语句(选择)语句、循环语句和转移语句等。等。l本教材将介绍本教材将介绍8种流程控制语句,见种流程控制语句,见2.3节。节。2.3语句与流程控制6import语句和语句和package语句语句 import语句语句如如果果用用户户程程序序要要用用到到其其他他包包中中的的类类时时,通通常常是是在在源源文文件件的的开开始始部部分分使使用用关关键键
3、字字import,后后跟跟包包名名和和句句点点隔隔开开的的类类名名导导入入它它们们,并并以以分分号结尾,称为号结尾,称为import语句:语句:import 包名包名.类名类名;import 包名包名.*;package语句语句package 包名包名;即可把类放到包中,但上面的即可把类放到包中,但上面的package语句必须是源文语句必须是源文件的第一条语句。件的第一条语句。2.3语句与流程控制一、结构化程序设计中的三种控制结构 顺序结构 选择结构:单选择结构、双选择结构、多选择结构 循环结构 程序的程序的3种基本结构种基本结构l顺序结构、分支结构、循环结构2.3语句与流程控制lif-els
4、e 选择语句选择语句if-else 结构的语法为:结构的语法为:if(boolean表达式表达式)语句语句1;else 语句语句2;if(boolean表达式表达式)语句组;语句组;else 语句组;语句组;ifif和和elseelse块中只有一块中只有一条语句条语句 ifif和和elseelse块中有多条块中有多条语句语句 if-elseif-else语句的执行流程语句的执行流程语句的执行流程语句的执行流程n boolean表达式表达式是任意一个返回布尔数据类型的表达式,而且必须是(比C或C+要严格)。n 与C或C+一样,每个单一语句后面都要有分号。为了增强程序的可读性,应将if或else后
5、的语句用括起来。n else子句是任选的,不能单独作为语句使用,它必须和if语句配对使用,并且总是与离它最近的if配对。int i1=123;int i2=456;if(i1i2)System.out.println(“The bigger one is:”+i1);else System.out.println(“The bigger one is:”+i2);补充说明:补充说明:if-else选择语句选择语句 只有只有if 子语句,没有子语句,没有else子语句(单分支子语句(单分支if-else语句)语句)if(boolean表达式)语句序列1;if-else 选择语句的变体情况表达式表
6、达式语句序列语句序列1真真假假语句序列语句序列3if-else 选择语句的变体情况 多个多个ifelse的嵌套(多分支的嵌套(多分支if-else语句)语句):if(boolean表达式1)语句序列1;else if(boolean表达式2)语句序列2;else 语句序列n;多个ifelse的嵌套(多分支if-else语句)if(表达式表达式1)语句语句1;else if(表达式表达式2)语句语句2;else if(表达式表达式3)语句语句3;else语句语句4;表达式1 语句1 语句2 语句3 语句4表达式2表达式3 多分支选择结构课堂练习课堂练习l习题 2.172.3语句与流程控制swit
7、ch 选择语句选择语句(开关语句开关语句):switch(表达式表达式)case 常量值常量值1:语句语句(组组);break;case 常量值常量值2:语句语句(组组);break;case 常量值常量值N:语句语句(组组);break;default:语句语句(组组);表达式必须为表达式必须为bytebyte,shortshort,int,longint,long或或charchar类型类型 v常量值常量值必须是与表达式必须是与表达式类型兼容的特定的一个常类型兼容的特定的一个常量量v不允许有重复的不允许有重复的casecase值值 2.3语句与流程控制switch表达式语句1语句2语句n语
8、句n+1.常量值1常量值2常量值ndefaultcase 表达式表达式expression的返回值类型必须是这几种类型之一:的返回值类型必须是这几种类型之一:int、byte、char、long,short。case子句中的子句中的标号值标号值value必须是必须是常量常量,而且所有,而且所有case子子句中的常量值应是句中的常量值应是不同不同的。的。default子句是子句是任选任选的。的。break语句语句用来在执行完一个用来在执行完一个case分支后,使程序跳出分支后,使程序跳出switch语句,即终止语句,即终止switch语句的执行。如果某个语句的执行。如果某个case分支分支后没有
9、后没有break语句,程序将不再做比较而执行下一个分支。语句,程序将不再做比较而执行下一个分支。switch语句的功能语句的功能可以可以用用if-else语句来实现,但某些情况语句来实现,但某些情况下,使用下,使用switch语句更简炼。语句更简炼。2.3语句与流程控制int a=100;int b=20;int c;char oper=+;switch(oper)case+:c=a b;break;case-:c=a-b;break;default:c=a*b;break;举举例:例:switch 选择语句选择语句(开关语句开关语句):三、循环语句三、循环语句while 循环 while(b
10、oolean表达式表达式)循环语句组循环语句组;do-while循环do 循环语句组循环语句组;while(boolean表达式表达式);for 循环 for(变量初始化变量初始化;boolean表达式表达式;递增变量的值递增变量的值)循环循环语句组语句组;/boolean表达式即为表达式即为“循环条件循环条件”/循环语句循环语句(组组),也称为也称为“循环体循环体”while语句语句lwhile(boolean表达式表达式)循环语句循环语句;/boolean表达式即为,循环条件表达式即为,循环条件l只要只要boolean表达式表达式的值为的值为非非0(真真),就重,就重复执行复执行while
11、循环循环语句语句,直到,直到表达式表达式值为值为0(假假)时止时止表达式表达式循环体YNdo-while语句语句ldo 循环语句循环语句;while(boolean表达式表达式);l首先执行首先执行语句语句,然后判断,然后判断boolean表达式表达式的值。的值。l如果表达式为如果表达式为0,结束,结束while循环语句。否则,循环语句。否则,再次执行循环再次执行循环语句。语句。l语句语句会被至少执行一次会被至少执行一次P循环体YNfor语句语句lfor(表达式1;表达式2;表达式3)循环语句;循环变量初始化循环变量初始化(通常对循环变(通常对循环变量赋初值)量赋初值)循环控制条件循环控制条件
12、(每次执行循每次执行循环语句前需判环语句前需判断断)改变改变循环变量的值循环变量的值(循环语句执行完一(循环语句执行完一次后计算表达式次后计算表达式3的的值)值)(1)计算计算表达式表达式1,(2)计算计算表达式表达式2。若。若表达式表达式2的值的值为为true(不满足结束条件)(不满足结束条件),则执行循环语句则执行循环语句,若若表达式表达式2的值为的值为false,则结束循环;,则结束循环;(3)执行执行循环语句循环语句;(3)计算计算表达式表达式3,再次判断表达式再次判断表达式2的值的值.依此重复下去依此重复下去,直到表直到表达式达式2的值为的值为false。注意注意 循环变量循环变量的
13、使用的使用l通过循环变量i 的值来控制循环次数。lFor循环的循环总次数是已知的。for(i=1;i=100;i+)sum+=i;forfor语句需要注意语句需要注意变变量量初初始始化化(表表达达式式1)1)、循循环环条条件件(表表达达式式2)2)以以及及改改变变变变量量值值(表表达达式式3)3)部部分分都都可可以以为为空空语语句句 (但但分分号号不不能能省省),三者均为空的时候,相当于一个无限循环。,三者均为空的时候,相当于一个无限循环。在在初初始始化化部部分分和和迭迭代代部部分分可可以以使使用用逗逗号号语语句句,来来进进行多个操作。逗号语句是用逗号分隔的语句序列。行多个操作。逗号语句是用逗
14、号分隔的语句序列。for(int i=0,int j=10;ij;i+,j-)选择三种循环的一般原则选择三种循环的一般原则l如果循环次数已知,用forl如果循环次数未知,用whilel如果循环体至少要执行一次,用do-whilel这只是“一般”原则,不是“原则”int n=1,sum=0;while(n0);int sum=0;for(int i=1;i=10;i+)sum+=i;while循环循环do-while循环循环for循环循环三、循环语句三、循环语句举例举例例题分析:素数问题例题分析:素数问题l给定一个正整数n=91,判断它是不是素数。l判断标准:素数只能被自身和1整除。例如,l91
15、%1=0,91%91=0.l思路:l将2至n-1之间的所有整数,同n进行求余操作,判断余数是否为0,如果发现任意一次为0,则n必然不是素数。l循环语句。程序结构程序结构public class App3public static void main(String args)/定义变量、初始化 /进行计算、处理 /输出结果public class PrimeNumpublic static void main(String args)int n=91;int x;/循环变量boolean s=true;for(x=2;x=n-1;x+)if(n%x=0)s=false;if(s)System.o
16、ut.println(+n+是素数);else System.out.println(+n+非素数);课堂练习课堂练习1l数的阶乘问题l对于任意一个正整数(=10),例如lint n=8;l求阶乘数n!,即 1x2x3x.x(n-1)xn实验任务实验任务1l求所有的“水仙花数”l“水仙花数”是一个三位数,其各位数字的立方和恰好等于该数本身。l例如,153是水仙花数。嵌套循环嵌套循环While循环语句的嵌套;循环语句的嵌套;while()while()for(;)while()do while();例题例题循环的嵌套循环的嵌套l在屏幕上打印如下的图案l提示:l尝试在屏幕上输出1行“*”,用循环实
17、现l使用System.out.print(“*”)输出一个字符*l再连续的输出5行“*”?l如何控制输出的*的个数及位置?public class Triangle public static void main(String args)/i 为行的循环控制变量为行的循环控制变量for(int i=1;i=5;i+)/先打印每行前的空格先打印每行前的空格for(int j=1;j=10-i;j+)();/打印每行的打印每行的*for(int j=1;j=2*i-1;j+)(*);();/换行换行课堂练习课堂练习3l将100元兑换成10元、5元和1元的硬币,l要求:每种硬币至少有1个l求不同的兑
18、换方法,输出在屏幕上。实验任务实验任务2l在屏幕上打印9x9乘法表四、四、break 和和 continue 语句语句break 语句在循环中用于立即从当前循环终止控制。遇到 break 语句时,将跳出当前循环语句(while,dowhile,for)。continue 语句则是从当前执行位置跳至循环的开始处(重新开始下一次循环)。continue 语句之后的语句将不再执行。阅读程序阅读程序2.5import;/引用类JOptionPanepublic class SimappApp7 public static void main(String args)String output=;for
19、(int i=1;i=10;i+)output+=n 第+i+次循环开始;;if(i=2)continue;if(i=3)break;output+=n第 +i+次循环结束!;output+=n结束整个程序的输出工作!;JOptionPane.showMessageDialog(null,output);System.exit(0);四、四、break 和和 continue 语句语句l带标号的break语句 在在Java中,可以为每个中,可以为每个语句块语句块(组组)加一个加一个标号标号,一个代码块,一个代码块通常是用大括号通常是用大括号 括起来的一段语句代码。加标号的格式为:括起来的一段语
20、句代码。加标号的格式为:BlockLabel:语句块语句块;l标号标号的命名规则,同标识符的命名规则,同标识符(字母、数字、下划线字母、数字、下划线,$)lbreak语句的语句的第二种使用情况第二种使用情况就是就是跳出跳出它所指定的块,并从紧它所指定的块,并从紧跟该块后的第一条语句处执行。跟该块后的第一条语句处执行。break BlockLabel;l使用在switch,for,while,dowhile循环语句中。a:/标记代码块标记代码块a b:/标记代码块标记代码块b c:/标记代码块标记代码块c break b;/这段语句将不执行这段语句将不执行 /代码块代码块c结束结束 /这段语句也
21、不执行这段语句也不执行 /代码块代码块b结束结束 /从这段语句开始执行从这段语句开始执行 /代码块代码块a结束结束四、四、break 和和 continue 语句语句四、四、break 和和 continue 语句语句l带标号的continue语句l普通的普通的continue语句只能结束其所在语句只能结束其所在当前循环当前循环语句语句的一次执行。的一次执行。l在嵌套循环结构中,带标号的在嵌套循环结构中,带标号的continue语句能够语句能够结结束标号所在的循环语句束标号所在的循环语句的一次执行(可能是最外层的一次执行(可能是最外层的循环语句)的循环语句)l语法:语法:continue Bl
22、ockLable;四、四、break 和和 continue 语句语句outer:for(int i=0;i10;i+)/外层循环外层循环 inner:for(int j=0;j10;j+)/内层循环内层循环 if(ij)continue outer;/内层循环结束内层循环结束 /外层循环结束外层循环结束实验任务实验任务3 l针对之前的编写的判断素数的程序l通过使用break或者continue语句,提高程序执行的效率(从减少循环次数的角度出发)本周作业本周作业lP50,l习题4.(2),4.(6)2.4数组在Java语言中,数组是一种最简单的引用数据类型,数组实际上是一组变量或对象实例,其类
23、型是相同的。可以在程序中声明各种基本类型和引用类型的数基本类型和引用类型的数组组。与C和C+相似,Java语言数组在使用时须经过声声明、创建、初始化明、创建、初始化三个步骤。一、数组的声明、创建、初始化与释放数组的声明是定义数组变量标识符,并不为数组分配内存的存储空间。Java语言支持两种完全等价的声明格式:格式一:格式一:char s;Point p;格式二:格式二:char s;Point p;注意:Java语言在声明数组时不允许指定数组大小。数组的创建创建是为数组的元素分配存储空间并进行自动初始化,创建数组使用“new”关键字,格式如下:char s;s=new char10;或者将声明
24、和创建连在一起声明和创建连在一起完成,如char s=new char10;数组的变量标识符是一个引用,数组的创建使得这个数组的变量标识符是一个引用,数组的创建使得这个引用指向存储数组的内存的首地址。引用指向存储数组的内存的首地址。除了自动初初始始化化之外,还可以采用赋值初始化和静态初始化的方法。赋值初始化赋值初始化方法即通过执行语句为数组的元素赋值。s0=a;s1=b;静静态态初初始始化化即是用大括号将数组元素的值一一列出的方式,即形如 char s=a,c,d,f;此时,可以省略数据的创建语句(需注意)省略数据的创建语句(需注意)。数组的释放数组的释放不需要程序员显式地操作,不再使用的数组
25、由系统作为垃圾自动处理。数组元素的数组元素的引用(访问)引用(访问)l数组元素的引用方式为:arrayNameindex每个数组都有一个属性属性lengthlength指明它的长度,例如:arrayName.lengtharrayName.length指明数组arrayName的长度。index为数组下标,它可以为整型常数或表达式,下标从0开始,到length-1结束。数组与循环的结合数组与循环的结合l输出数组的内容lint a=1,2,3,4,i;lfor(i=0;ia.length;i+)System.out.println(ai);编写程序,用起泡法对10个数排序(按由小到大顺序)。起泡
26、法的思路是:起泡法的思路是:将相邻两个数比较,将小的调到前头。见图5.2。然后进行第2趟比较,对余下的前面5个数按上法进行比较,见图5.3。图1 图2可以推知,如果有可以推知,如果有n个数,则要进行个数,则要进行n-1趟比较趟比较(和交和交换换)。在第。在第1趟中要进行趟中要进行n-1次两两比较,在第次两两比较,在第j趟中要趟中要进行进行n-j次两两比较。次两两比较。根据以上思路写出程序,今设n=10,本例定义数组长度为11,a0不用,只用a1a10,以符合人们的习惯。实验任务实验任务4:l依据上述原理。l编写程序对键盘输入的10个整数进行排序。对数组名的理解对数组名的理解:l内存中每个区域都
27、有个地址。数组是在内存中开辟的一个连续区域。数组名则实际上存储的是该连续区域的首地址。l下面的例子中定义了两个数组a和b,存储的实际上都是两个内存区域的首地址。float b=new float5;b0 x785BAb0b4float a=new float5;a0 x712334a0a4对数组名的理解对数组名的理解:l当执行一条 a=b;语句后。那么a实际上存储的就不是原来的地址而是b原来指向的地址 0 x785ba。那么此时a和b都指向了同一个内存区的地址。float b=new float5;b0 x785BAb0b4float a=new float5;a0 x712334a0a4例子
28、分析1 public class Example2_3 public static void main(String args)int a=100,200,300;int b=10,11,12,13,14,15,16;b=a;b0=123456;a0=500;(数组a:+a0+,+a1+,+a2);(数组b:+b0+,+b1+,+b2);(数组b的长度:+b.length);在Java语言中没有多维数组,而是通过定义数组的数组实现多维数组,多维数组的声明、创建和初始化与一维数组相似,如int twoDim=new int4;即声明和创建了一个有4个元素的数组,每个元素都是一个数组。二、多维数组二、多维数组 (暂时不看暂时不看)