




已阅读5页,还剩67页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 Java语句及其控制结构,3.1 Java程序结构 3.2 选择语句 3.3 循环语句 3.4 跳转语句 习题,例3.1 以一个程序范例来说明Java程序的构成。 import java.applet.Applet; import java.awt.*; public class GetSquare extends Applet Label label1; public void init() label1=new Label(前个数的平方); add(label1); ,3.1 Java程序结构 3.1.1 Java程序构成,public void paint(Graphics g) for (int i=0; i30; i+) int x=i%10, y=i/10; g.drawString(String.valueOf(i+1)* (i+1), 20+30*x, 50+25*y); ,从例3.1可以看到,Java源程序一般包括Java包引入(如果有的话)和类定义两部分。 Java程序中,必须含有一个可被外界(通常是java解释器)所直接调用的类,这个类称为该应用程序的主类。一个源程序中可以定义多个类,但只能有一个是主类,Java Applet程序的主类是继承自Applet的子类。Java Application程序的主类是包含main方法的类,整个应用程序就是从main方法开始执行的。 类定义由类声明语句和类体组成。 类声明语句用来说明类的名称、访问权限及类的属性。,类体也由两部分组成: 成员变量和成员方法。在例3.1GetSquare类中,lable1是添加的成员变量,init和paint是继承下来的成员方法。 成员变量为类中定义的变量(又称属性、域),用来说明类的状态和特性。定义成员变量需要声明成员变量的名称、类型。 成员方法为类中的方法,用来实现类的功能和行为,是完成程序任务的关键。Java Application程序中一定要有main主方法。而Java Applet程序一般要有init()初始化方法或paint(Graphics g)画图方法。 应该注意到,类体中除了成员变量说明语句外没有其他语句,Java规定所有操作性语句必须放在成员方法中。,方法类似于其他程序设计语言中的函数,可以调用,可以有返回值。成员方法可以继承父类的方法,也可以自定义成员方法。根据需要,方法中可以定义局部变量,但更重要的是组织方法中的语句结构,因为Java程序由各种语句结构控制着程序流程和功能的实现。,Java语句是Java标识符的集合,由关键字、常量、变量和表达式构成。Java语句分为说明性语句和操作性语句。 Java说明性语句用来说明包和类的引入、类的声明、变量的声明。例如: import java.applet.Applet; /包引入语句 public class GetSquare extends Applet;/声明类语句 Java操作性语句有表达式语句、复合语句、选择语句和循环语句等。语句以分号“;”作为结束标志,单独的一个分号被看作一个空语句,空语句不做任何事情。,3.1.2 Java语句,1. 表达式语句 在表达式后边加上分号“;”,就是一个表达式语句。经常使用的表达式语句有赋值语句和方法调用语句。表达式语句是最简单的语句,它们被顺序执行,完成相应的操作。 例如: int k, i=3, j=4; k=i+j; System.out.println(k=+k);,2. 复合语句 复合语句也称为块(block)语句,是包含在一对大括号中的任意语句序列。与其他语句用分号作结束符不同,复合语句右括号后面不需要分号。尽管复合语句含有任意多个语句,但从语法上讲,一个复合语句被视为一个简单语句。,例3.2 复合语句示例。 class Block public static void main(String args) int k, i=3, j=4; k=i+j; System.out.println(k=+k); float f; f=j+4.5F; i+; System.out.println(f=+f); System.out.println(i=+i); ,利用选择语句结构可以根据条件控制程序流程,改变程序执行的顺序。,3.2 选择语句,if语句的语法格式为: if (条件表达式) s1语句; 这是最简单的单分支结构。条件表达式的值为true,就执行s1语句,否则就忽略s1语句。s1语句可以是复合语句。,3.2.1 if语句,if语句通常与else语句配套使用,形成二分支结构。它的语法格式为: if (条件表达式) s1语句; else s2语句; 当条件表达式的值为true,就执行s1语句,忽略else和s2语句;条件表达式的值为false,程序忽略s1语句,执行else后面的s2语句。s1和s2都可以是复合语句。,3.2.2 ifelse语句,例3.3 比较两个数的大小并按升序输出,运行结果如图3.1所示。 class C1 public static void main(String args) double d1=23.4; double d2=35.1; if(d2=d1) System.out.println(d1); System.out.println(d2); else System.out.println(d2); System.out.println(d1); ,图 3.1,对于复杂的情况,可以嵌套使用ifelse语句。它的语法格式为: if (条件表达式1) s1语句; else if (条件表达式2) s2语句; else s3语句; 在这里依次计算条件表达式,如果某个条件表达式的值为true,就执行它后面的语句,其余部分被忽略;所有表达式的值都为false,就执行最后一个else后的s3语句。s1、s2和s3都可以是复合语句。,3.2.3 ifelse复合结构,例3.4 下面是一个用ifelse语句构造多分支程序的例子,判断某一年是否为闰年。 闰年的条件是符合下面二者之一: 能被4整除,但不能被100整除;能被400整除。输出结果如图3.2所示。 public class LeapYear public static void main(String args) boolean leap; int year=1989; if (year%4=0 ,year=2000; / 方法2 if (year%4!=0) leap=false; else if (year%100!=0) leap=true; else if (year%400!=0) leap=false; else leap=true; if (leap=true) System.out.println(year+ 年是闰年); else System.out.println(year+ 年不是闰年);,year=2050; / 方法3 if (year%4=0) if (year%100=0) if (year%400=0) leap=true; else leap=false; else leap=false; else leap=false; if (leap=true) System.out.println(year+ 年是闰年); else System.out.println(year+ 年不是闰年); ,图 3.2 方法1用一个逻辑表达式包含了所有的闰年条件;方法2使用了ifelse语句的复合形式;方法3则通过大括号对ifelse进行匹配来实现闰年的判断。可以根据程序对比这3种方法,体会其中的联系和区别,在不同的场合选用适当的方法。,虽然嵌套的条件语句可实现多个分支处理,但嵌套太多时容易出错和混乱,这时可以使用开关语句switch处理。实际上开关语句switch也是一种ifelse结构,不过它使你在编程时很容易写出判断条件,特别是有很多条件选项的时候。 开关语句switch的语法格式为: switch (表达式) case 常量1: 语句1; break;,3.2.4 switch开关语句,case 常量2: 语句2; break; default: 语句n; 其中switch、case、default是关键字,default子句可以省略。开关语句先计算表达式,然后将表达式值与各个常量比较,如果表达式值与某个常量相等,就执行该常量后面的语句;如果都不相等,就执行default下面的语句。如果无default子句,就什么都不执行,直接跳出开关语句。,使用开关语句时,注意以下几点: case后面的常量必须是整数或字符型,而且不能有相同的值; 通常在每一个case中都应使用break语句提供一个出口,使流程跳出开关语句。否则,在第一个满足条件case后面的所有语句都会被执行,这种情况叫做落空。,例3.5 有break语句的switch结构示例。本程序当温度变量c小于10时,显示“有点冷”;c小于25时,显示“合适”;c大于25且小于35时,显示“有点热”;c大于35时,显示“太热了”。输出结果为c等于28时的情况如图3.3所示。 图 3.3,public class W1 public static void main(String args) int c=28; switch (c10?1:c25?2:c35?3:4) case 1: System.out.println( +c+ 有点冷); break; case 2: System.out.println( +c+ 合适); break; case 3: System.out.println( +c+ 有点热); break; default: System.out.println( +c+ 太热了); ,例3.6 无break语句的switch结构示例,输出结果如图3.4所示。 图 3.4,public class W2 public static void main(String args) int c=28; switch (c10?1:c25?2:c35?3:4) case 1: System.out.println( +c+ 有点冷); case 2: System.out.println( +c+ 合适); case 3: System.out.println( +c+ 有点热); default: System.out.println( +c+ 太热了); ,循环可使程序根据一定的条件重复执行某一部分程序代码,直到满足终止循环条件为止。 Java中提供的循环语句有: 确定次数循环(for)、条件循环(while)、先执行后判定循环(do)。,3.3 循环语句,如果希望程序的一部分内容按固定的次数重复执行,通常可以使用for循环。for循环采用一个计数器控制循环次数,每循环一次计数器就计数,直到完成给定的循环次数为止。,3.3.1 for循环语句,例3.7 对一维数组中的每个元素赋值,然后按逆序输出,结果如图3.5所示。 public class A2 public static void main(String args) int i; int a=new int5; for (i=0; i=0; i-) System.out.println(a+i+ = +ai); ,图 3.5,例3.8 按5的增量打印出一个从摄氏度到华氏度的转换表,输出结果如图3.6所示。 class CtoF public static void main (String args) int fahr,cels; System.out.println(摄氏度 华氏度); for (cels=0; cels=40; cels+=5) fahr=cels*9/5+32; System.out.println( +cels+ +fahr); ,图 3.6,for循环的语法格式为: for (表达式1; 表达式2; 表达式3) 循环体 其中表达式1可以给出计数器的初值,是一个赋值语句;表达式2指出循环结束条件,是一个逻辑表达式;表达式3指出计数器每次的增量,是一个赋值语句。,注意: 计数器可在for语句之前定义,也可在循环括号中定义。计数器增量为1时常写成增量运算的形式,以加快运算速度。根据需要,增量可以大于或小于1。增量计算也可以放在循环体中进行,即把表达式3移到循环体内的适当位置,原位置为空。 使用循环语句时常常会遇到死循环的情况,也就是无限制地循环下去。所以在使用for循环时,要注意初值、终值和增量的搭配。终值大于初值时,增量应为正值,终值小于初值时,增量应为负值。编程时必须密切关注计数器的改变,这是实现正常循环避免陷入死循环的关键。,while循环不像for循环那么复杂,while循环只需要一个条件判断语句,便可以进行循环操作。,3.3.2 while循环语句,例3.9 下面这个程序可接受从键盘输入的数字1、2、3,并显示得到的奖品;如果输入其他数字则显示字符“没有奖品给你!”。其中使用了开关语句和while循环语句。输出结果如图3.7所示。 import java.io.*; class GetBonus public static void main(String args) throws IOException char ch; System.out.println(按 1/2/3数字键可得大奖!); System.out.println(按空格键后回车可退出循环操作。); while (ch=(char)System.in.read()!= ) System.in.skip(2); / 跳过回车键 switch (ch) case 1: System.out.println(你得到一辆车!);,break; case 2: System.out.println(你得到一台彩电!); break; case 3: System.out.println(你得到一台冰箱!); break; default: System.out.println(没有奖品给你!); ,图 3.7,while循环的语法格式为: while (条件表达式) 循环体 其中while是关键字。每次循环之前都要计算条件表达式,其值为true时,就执行一次循环体中的语句,然后再计算条件表达式,决定是否再次执行循环体中的语句;如果条件表达式的值为false时,就跳出循环体,执行循环体下面的语句。 注意: while循环中的条件表达式是逻辑表达式,所以循环体中一定要有改变条件表达式值的语句,使条件表达式的值有机会变为false,否则会陷入死循环。,dowhile循环与while循环相反,是先执行循环体中的语句,再计算while后面的条件表达式,若条件表达式值为false则跳出循环;否则继续下一轮循环。 有些情况下,不管条件表达式的值是为true还是false,都希望把指定的语句至少执行一次,那么就应使用dowhile循环。,3.3.3 dowhile循环语句,例3.10 求12+100之和,输出结果如图3.8所示。 class Sum public static void main(String args) int n=1; int sum=0; do sum+=n+; while (n=100); System.out.println(1+2+100 =+sum); ,图 3.8,归纳dowhile循环的语法格式为: do 循环体 while (条件表达式); 其中do、while是关键字。程序首先执行do下面的循环体,然后计算while后面条件表达式的值,如果其值为true,则重复执行循环体;否则,就结束循环。 与while循环相同,do循环在循环体中也一定要有改变条件表达式值为false的语句,否则会陷入死循环。dowhile循环控制并不是很常用,但有时却非常重要,使用时特别注意不要忘记了while语句结尾处的分号“;”。,例3.11 分别用while、do和for循环语句实现累计求和。输出结果如图3.9所示。 public class Sum1 public static void main(String args) int n=10, sum=0; while (n0) sum=0; for (int i=1; i=n; i+) sum+=i; System.out.println(前+n+个数的总和为: +sum); n-; ,3.3.4 循环语句的嵌套,图 3.9,一个循环一般应包括4部分内容。 (1) 初始化部分: 用来设置循环的一些初始条件,计数器清零等。 (2) 循环体部分: 这是反复被执行的一段代码,可以是单语句,也可以是复合语句。 (3) 迭代部分: 这是在当前循环结束,下一次循环开始时执行的语句,常用来使计数器加1或减1。 (4) 终止部分: 通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。,3.3.5 循环语句小结,跳转语句可以无条件改变程序的执行顺序。Java支持3种跳转语句: break、continue和return。,3.4 跳转语句,break语句提供了一种方便的跳出循环的方法。使用break语句可以立即终止循环,跳出循环体,即使循环没有结束也如此。,3.4.1 break语句,例3.12 break语句的使用示例,输出结果如图3.10所示。 class B public static void main(String args) boolean test=true; int i=0; while (test) i=i+2; System.out.println(i=+i); if (i=10) break; System.out.println( i为+i+时循环结束); ,图 3.10,标号是标记程序位置的标识符。break语句只能跳转到循环语句下面的第一条语句上,而带标号的break语句可直接跳转到标号处。正常的break只退出一重循环,如果要退出多重循环,可以使用带标号的break语句。它的语法格式为: 标识符: break 标识符;,3.4.2 带标号的break语句,例3.13 带标号的break语句的使用示例。运行该程序,正常情况下可从键盘接受16个输入字符,但当输入b按回车时,break lab1语句就会结束二重循环。输出结果如图3.11所示。 class B1 public static void main(String args) throws java.io.IOException char ch; lab1: / 此处为标号标识符 for (int i=0; i4; i+) for (int j=0; j4; j+) ch=(char)System.in.read(); System.in.skip(2); if (ch=b) break lab1;/跳到标号标识符处 if (ch=c) System.out.println(继续);, System.out.println(结束两重循环); 图 3.11,continue语句只能用在循环结构中,它跳过循环体中尚未执行的语句,重新开始下一轮循环,从循环体第一个语句开始执行。,3.4.3 continue语句,例3.14 下面的程序可以输出19中除6以外所有偶数的平方值,输出结果如图3.12所示。 class C2 public static void main(String args) for (int i=2;i=9;i+=2) if (i=6) continue; System.out.println(i+ 的平方 = +i*i); ,图 3.12,Java也支持带标号的continue语句,它通常用在嵌套循环的内循环中,可以用标号标出想跳到哪一条语句继续重复执行程序。其语法格式为: 标识符: continue 标识符;,3.4.4 带标号的continue语句,例3.15 带标号的continue语句的使用示例,输出结果如图3.13所示。 class C3 public static void main(String args) lab1: for (int i=1; i3) System.out.println(Continue); continue lab1; System.out.println(i=+i+ j=+j); ,图 3.13,例3.16 求100200间的所有素数。该例通过一个嵌套的for循环来实现,输出结果如图3.14所示。 public class Find public static void main(String args) System.out.println( * 100200间的所有素数 *); int n=0; outer: for (int i=101; i200; i+=2) int k=15; for (int j=2; j=k; j+) if (i%j=0) continue outer; System.out.print( +i); n+; if (n10) continue;,System.out.println(); n=0; System.out.println(); 图 3.14,return语句用于方法的返回上,当程序执行到return语句时,终止当前方法的执行,返回到调用这个方法的语句。return语句通常位于一个方法体的最后一行,有带参数和不带参数两种形式,带参数形式的return语句退出该方法并返回一个值。 当方法用void声明时,说明不需要返回值(即返回类型为空),应使用不带参数return语句。不带参数的return语句也可以省略,当程序执行到这个方法的最后一条语句时,遇到方法的结束标志就自动返回到调用这个方法的程序中。,3.4.5 return语句,带参数的return语句格式为: return 表达式; 当程序执行到这个语句时,首先计算“表达式”的值,然后将表达式的值返回到调用该方法的语句。返回值的数据类型必须与方法声明中的返回值类型一致,可以使用强制类型转换来使类型一致。,例3.17 带参数的return语句的使用示例,输出结果如图3.15所示。 class CircleArea final static double PI=3.14159; public static void main(String args) double r1=8.0, r2=5.0; System.out.println(半径为+r1+的圆面积+area(r1); System.out.println(半径为+r2+的圆面积+area(r2); static double area(double r) return (PI*r*r); ,图 3.15,3-1 分析下面的源程序的结构和运行结果。 class CircleArea final static double PI=3.14159; public static void main(String args) double r1=8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阳泉出租车转让协议书
- 外聘人员合同解除协议书
- 劳务人身损害和解协议书
- 北京车牌结婚过户协议书
- 农村兄弟土地分家协议书
- 技术服务协议终止协议书
- 业主集体退房破产协议书
- 中外企业员工劳动协议书
- 招待客户用餐合同范本
- 二手车行售车合同范本
- 2022年上海蓬莱中学高二政治下学期期末试卷含解析
- 中印边境争端
- 单病种管理汇总
- 第六单元作文训练:“批判与观察”高一语文教材同步作文 素材拓展+范文展示(统编版必修下册)
- 心肺听诊课件
- 中小学生环境教育专题教育大纲
- 商务礼仪之办公室礼仪课件
- 绿色施工策划书(模板)
- 肺癌生活质量量表
- GA 1517-2018 金银珠宝营业场所安全防范要求
- 浙江高考英语--600高频词汇
评论
0/150
提交评论