




已阅读5页,还剩72页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 Java语句及其控制结构,主要任务 了解Java程序的构成 了解Java语句的种类 学习使用各种控制结构,本章主要内容,3.1Java语句的类型 3.2选择语句 3.3循环语句 3.4跳转语句,3.1 Java语句的类型,3.1.1 Java程序构成 3.1.2 Java语句的种类,3.1 Java语句的类型,例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); 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.1 Java程序构成,以上例得出:,Java源程序一般包括两部分:即Java包引入(如果有的话)部分和类定义部分。 类定义由类声明语句和类体组成。 类声明语句用来说明类的名称、访问权限及类的属性。 类体也由两部分组成:成员变量和成员方法。 成员变量为类中定义的变量,用来说明类的状态和特性。 成员方法为类中的方法,用来实现类的功能和行为。类似与c、vb中的函数。,3.1.2 Java语句的种类,Java语句是Java标识符的集合,由关键字、常量、变量和表达式构成。简单的Java语句以分号“;”作为结束标志,单独的一个分号被看做一个空语句,空语句不做任何事情。复合结构的Java语句以大括号“”作为结束标志。 Java语句一般分为说明性语句和操作性语句两种类型。,1说明性语句,Java的说明性语句包含包和类引入语句、声明类语句、声明变量语句、声明对象语句等。例如3.1: import java.applet.Applet; /包引入语句 public class GetSquare extends Applet;/声明类语句,2操作性语句,Java的操作性语句包含表达式语句、复合语句、选择语句和循环语句、跳转语句等。Java规定所有的操作性语句必须放在成员方法中。 下面介绍表达式语句与复合语句的构成,其他操作性语句将分别在后面介绍。,1) 表达式语句,在表达式后边加上分号“;”,就是一个表达式语句。可以细分为赋值表达式语句;增量表达式(使用+或-)语句;方法调用表达式语句;对象创建表达式语句。 表达式语句是最简单的语句,它们被顺序执行,完成相应的操作。 举例如下: aValue=89.2 ; /赋值语句 aValue+; /增量语句 System.out.println(aValue); /方法调用语句 Integer i1=new Integer(4);/对象创建语句,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 选择语句,控制语句用于改变程序执行的顺序。程序利用控制语句有条件地执行语句、循环地执行语句或者跳转到程序中的其它部分执行语句。 Java所提供的流程控制语句几乎与C/C+完全相同。主要有选择语句、循环语句、跳转语句。,3.2.1 if语句,if 语句可以使程序根据条件有选择地执行语句。 if语句的语法格式为: if (条件表达式) s1语句; 这是最简单的单分支结构。条件表达式的值为true,就执行s1语句,否则就忽略s1语句。s1语句可以是复合语句。,3.2.2 ifelse语句,if语句通常都与else语句配套使用,形成二分支结构。它的语法格式为: if (条件表达式) s1语句; else s2语句; 当条件表达式的值为true,就执行s1语句,忽略else和s2语句;否则,条件表达式的值为false,程序忽略s1语句,执行else后面的s2语句。s1和s2都可以是复合语句。,例3.3 比较两个数的大小并按升序输出,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.2.3 多分支选择语句,对于超过二分支选择的情况,可以嵌套使用ifelse语句。它的语法格式为: if (条件表达式1) s1语句; else if (条件表达式2) s2语句; else s3语句; 注意:一个if 语句可以有任意多个“else if”部分,但只能有一个else。,例3.4 下面是一个用if.else语句构造多分支程序的例子,判断某一年是否为闰年。,判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰 、普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年) 、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年),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.4 开关语句(switch),switch 语句是一个多路选择语句,也称为开关语句。它可以根据一个整型表达式有条件地选择一个语句执行。(类似vb中的select case语句) 开关语句switch的语法格式为: switch (表达式) case 常量1: 语句1; break; case 常量2: 语句2; break; default: 语句n; 流程图见下页,例3.5 switch语句的使用,有break语句,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 switch语句的使用,无break语句。,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+“ 太热了“); ,switch语句的使用,无break语句。输出结果如图所示:,当然,使用嵌套if语句也可以实现多分支选择结构。不过比较繁琐。使用switch 语句更简单,程序的可读性强,且程序运行效率更高。使用开关语句时,注意以下几点:,switch后面的表达式的类型可以是byte,char,short和int(不允许浮点数类型和long型); case后面的常量必须是整数或字符型,而且不能有相同的值; default语句可以省去不要。 通常在每一个case中都应使用break语句提供一个出口,使流程跳出开关语句。否则在第一个满足条件case后面的所有语句都会被执行,从而失去开关的效果。这种情况叫做落空。,习题35的三种程序。 public class Cj1 public static void main(String args) int x=89; switch(x90?1:x80?2:x70?3:x60?4:5) case 1: System.out.println(x+“优秀“);break; case 2: System.out.println(x+“良好“);break; case 3: System.out.println(x+“中等“); break; case 4: System.out.println(x+“及格“);break; default: System.out.println(x+“不及格“); ,public class Cj2 public static void main(String args) int grade=76; if(grade=90) System.out.println(“成绩:优“); else if(grade=80) System.out.println(“成绩:良“); else if(grade=70) System.out.println(“成绩:中等“); else if(grade=60) System.out.println(“成绩:及格“); else System.out.println(“成绩:不及格“); ,public class Cj3 public static void main(String args) int x=89; switch(99-x)/10+1) case 1: System.out.println(x+“优秀“);break; case 2: System.out.println(x+“良好“);break; case 3: System.out.println(x+“中等“); break; case 4: System.out.println(x+“及格“);break; default: System.out.println(x+“不及格“); ,程序中的成绩值能否从控制台读取了? 本章讲完后补充数据的输入和输出方法。,3.3 循环语句,Java中提供的循环语句有: 确定次数循环(for) 条件循环(while) 先执行后判定循环(dowhile),3.3.1 for循环语句,如果希望程序的一部分内容按固定的次数重复执行,通常可以使用for循环。for循环采用一个计数器控制循环次数,每循环一次计数器就加1,直到完成给定的循环次数为止。 for循环的语法格式为: for (表达式1; 表达式2; 表达式3) 循环体 其中表达式1指出计数器的初值,是一个赋值语句;表达式2指出循环结束条件,是一个逻辑表达式;表达式3指出计数器每次的增量,是一个赋值语句。,例3.7 该程序对一维数组中的每个元素赋值,然后按逆序输出。,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.8 按5度的增量打印出一个从摄氏度到华氏度的转换表。,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); ,摄氏度与华氏度的转换: 华氏度32摄氏度1.8 摄氏度(华氏度32)1.8,输出结果如图所示 :,3.3.2 while循环语句,例3.9 下面这个程序可接受从键盘输入的数字1、2、3,并显示得到的奖品;如果输入其它数字或字符显示“没有奖品给你!”。其中使用了开关语句和while循环语句。输出结果如图所示。,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(“没有奖品给你!“); ,以上得出:,while循环的语法格式为: while (条件表达式) 循环体 其中while是关键字。每次循环之前都要计算条件表达式,其值为true时,就执行一次循环体中的语句,然后再计算条件表达式,决定是否再次执行循环体中的语句;如果条件表达式的值为false时,就跳出循环体,执行循环体下面的语句。,3.3.3 dowhile循环语句,dowhile循环与while循环相反,是先执行循环体中的语句,再计算while后面的条件表达式,若条件表达式值为false则跳出循环,否则继续下一轮循环。 什么时候使用dowhile循环呢?有些情况下,不管条件表达式的值是为true还是false,你都希望把指定的语句至少执行一次,那么就应使用dowhile循环,看下面的例子。,例3.10 求12+100之和,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); ,输出结果:,以上得出:,归纳dowhile循环的语法格式为: do 循环体 while (条件表达式); 其中do、while是关键字。程序首先执行do下面的循环体,然后计算while后面条件表达式的值,如果其值为true,则重复执行循环体,否则,就结束循环。,3.3.4 循环语句的嵌套使用,例3.11 分别用while、do和for循环语句实现累计求和。输出结果如图所示。,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.5 循环语句小结,一个循环一般应包括四部分内容: 1初始化部分:用来设置循环的一些初始条件,计数器清零等。 2循环体部分:这是反复被执行的一段代码,可以是单语句,也可以是复合语句。 3迭代部分:这是在当前循环结束,下一次循环开始时执行的语句,常用来使计数器加1或减1。 4终止部分:通常是一个布尔表达式,每一次循环要对该表达式求值,以验证是否满足循环终止条件。,3.4 跳转语句,跳转语句是用来直接控制执行流程的语句。它们的功能就是改变while、do-while、for及switch语句的正常运行。如我们刚学过的break语句在while、switch流程中的使用。 Java语言提供了3个跳转语句:break、continue和return语句。,3.4.1 break语句,用break语句可以终止swtich语句,控制流程会马上转到switch结构后的语句。我们在前面例题3.5中已经碰到过。 break语句不仅可以用在switch语句中,还可以用在for、while、do while等循环语句中,用来终止循环。,在循环语句中执行break语句将导致程序控制流跳出循环语句,继续执行循环语句的下一条语句。 while(表达式) break; next,break语句有两种形式: 无标号break语句 有标号break语句。 在嵌套的循环语句中,无标号break结束的是最内层的循环。有标号break则可以终止标号所指的内层循环,也可以终止标号所指的外层循环。 例3.12 用 break语句终止while循环。输出结果如图所示。,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+“时循环结束“); ,程序代码:,break 语句用于满足条件时,强制退出while循环结构,执行while循环后的语句 System.out.println(“ i为”+i+“时循环结束”);,3.4.2 带标号的break语句,标号是标记程序块位置的标识符,它一定要在某个循环语句的前面,可以说是下面循环的名字。 break语句只能跳出当前循环语句,若有双重循环,而break语句又写在内循环中,则执行break语句只能退出内循环,而不能退出外循环。若想退出外循环,可使用带标号的break语句。终止并跳出这个标记所标识的循环。 它的语法格式为: 标识符: . break 标识符; 这里的标识符为标号。,import java.io.*; 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.13 带标号的break语句的使用。输出结果如图:,使用输入机制的程序必须在程序开头添加import java.io.*;这个声明语句,表示用到java语言预定义的输入输出程序包 System.in.read()从输入流的当前位置读取第一个字符 ,并返回一int型值,所以输入ck结果和输入c是一样的,同时需要将int转换为char 例如: 输入 123 ;则读取 1 输入 abc ;则读取 a System.in.read()方法不能忽略回车键,因为它会会连同回车一起读取,要想跳过回车键读取数据,需要用到System.in.skip()方法,从本质上说,无标号的break语句用于终止内部的switch、for、while或者do-while,如例3.5和3.12。而有标号的break语句用于终止一个带标号的循环。,3.4.3 continue语句,与break语句相反,continue语句的功能是跳过循环体中随后的语句,进行下一次循环的操作。 continue语句只能用在循环结构中,它跳过循环体中尚未执行的语句,重新开始下一轮循环。 不带标号的continue语句用于跳过本次for、while或者do-while循环。 所以说在循环程序中, continue终止本次迭代,而不是终止循环。,例3.14 下面的程序可以输出19中除6以外所有偶数的平方值。 输出结果如图:,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); 注意:当i6时,Continue语句跳过System.out.println(i+“ 的平方 = ”+i*i); 语句,重新执行下一轮循环。,程序代码:,3.4.4 带标号的continue语句,Java也支持带标号的continue语句,它通常用在嵌套循环的内循环中,你可以用标号标出你想跳到哪一条语句继续重复执行程序。它的语法格式为: 标识符: . continue 标识符; continue语句并不常用,看看例题3.15,例题3.15 public class Find public static void main(String args) System.out.println(“100200之间的所有素数“); int n=0; outer:/标号 for (int i=101; i200; i+=2) for (int j=2; j=15; j+) if(i%j=0) continue outer; System.out.print(“ “+i); n+; if (n10) continue;/continue outer;跳过本次循环,重新新一轮循环 System.out.println();/否则,换行,并使得n=0再执行新循环 n=0; System.out.println(); ,3.4.5 return语句,return语句即为返回语句,return语句用于方法的返回上,主要功能是从一个方法返回到另一个方法。我们知道,程序设计往往需要在一个方法中调用另一个方法,调用者称之为主调方法,被调用的方法称为子方法,这与C+是一致的。当我们从子方法返回到主方法时,就得使用return语句进行说明。当程序执行到return语句时,终止当前方法的执行,返回到调用这个方法的语句。return语句通常位于一个方法体的最后一行,有带参数和不带参数两种形式,带参数形式的return语句退出该方法并返回一个值。 return语句的一般使用格式为 return 表达式;,例3.17 带参数的return语句的使用。输出结果如图所示 :,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); ,程序代码:,补充:输入和输出数据,一、输出数据到控制台 Java使用下列语句向控制台输出数据: System.out.println(); System.out.print(); 两者的差别是:println()执行输出后光标移到下一行,print()输出后光标不换行。,class lx4 public static void main(String args) System.out.print(“我不要换行“); System
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园开学安全知识培训课件
- 工会相关试题及答案
- 三体培训试题及答案
- gcp考试题及答案
- 物品分类试题及答案
- 煤田地质试题及答案
- 居家客服面试题及答案
- 溢达集团面试题及答案
- 弯曲力学考试题及答案
- 公寓管理考试题及答案
- 2025年内河船员考试(主推进动力装置2103·一类三管轮)历年参考题库含答案详解(5套)
- 感染性腹主动脉瘤护理
- 公司不交社保合作协议书
- 城市轨道交通工程监测技术
- 骨灰管理员职业技能鉴定经典试题含答案
- 火锅店股东协议合同范本
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 腰椎ODI评分完整版
- 5.Braden评估表及其评分指引
- GB/T 3920-2008纺织品色牢度试验耐摩擦色牢度
- 金风科技-风电产业集团-供应商现场作业基础安全考试附答案
评论
0/150
提交评论