《java语言实用教程第3章.ppt》由会员分享,可在线阅读,更多相关《java语言实用教程第3章.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第3章章 Java语句及其控制结构语句及其控制结构3.1 Java程序结构程序结构3.2 选择语句选择语句3.3 循环语句循环语句3.4 跳转语句跳转语句习题习题例例3.1以一个程序范例来说明以一个程序范例来说明Java程序的构成。程序的构成。importjava.applet.Applet;importjava.awt.*;publicclassGetSquareextendsAppletLabellabel1;publicvoidinit()label1=newLabel(前个数的平方前个数的平方);add(label1);3.1Java程序结构程序结构3.1.1Java程序构成程序构成
2、publicvoidpaint(Graphicsg)for(inti=0;i=d1)System.out.println(d1);System.out.println(d2);elseSystem.out.println(d2);System.out.println(d1);图图3.1对对于于复复杂杂的的情情况况,可可以以嵌嵌套套使使用用ifelse语语句句。它它的的语法格式为:语法格式为:if(条件表达式条件表达式1)s1语句语句;elseif(条件表达式条件表达式2)s2语句语句;elses3语句语句;在这里依次计算条件表达式,如果某个条件表达式的在这里依次计算条件表达式,如果某个条件表达
3、式的值为值为true,就执行它后面的语句,其余部分被忽略;就执行它后面的语句,其余部分被忽略;所有表达式的值都为所有表达式的值都为false,就执行最后一个就执行最后一个else后的后的s3语句。语句。s1、s2和和s3都可以是复合语句。都可以是复合语句。3.2.3ifelse复合结构复合结构例例3.4下面是一个用下面是一个用ifelse语句构造多分支程序的例语句构造多分支程序的例子,判断某一年是否为闰年。子,判断某一年是否为闰年。闰年的条件是符合下面二者之一:闰年的条件是符合下面二者之一:能被能被4整除,但不整除,但不能被能被100整除;能被整除;能被400整除。输出结果如图整除。输出结果如
4、图3.2所示。所示。publicclassLeapYearpublicstaticvoidmain(Stringargs)booleanleap;intyear=1989;if(year%4=0&year%100!=0)|(year%400=0)/方法方法1System.out.println(year+年是闰年年是闰年);elseSystem.out.println(year+年不是闰年年不是闰年);year=2000;/方法方法2if(year%4!=0)leap=false;elseif(year%100!=0)leap=true;elseif(year%400!=0)leap=fals
5、e;elseleap=true;if(leap=true)System.out.println(year+年是闰年年是闰年);elseSystem.out.println(year+年不是闰年年不是闰年);year=2050;/方法方法3if(year%4=0)if(year%100=0)if(year%400=0)leap=true;elseleap=false;elseleap=false;elseleap=false;if(leap=true)System.out.println(year+年是闰年年是闰年);elseSystem.out.println(year+年不是闰年年不是闰年)
6、;图图3.2方法方法1用一个逻辑表达式包含了所有的闰年条件;方用一个逻辑表达式包含了所有的闰年条件;方法法2使用了使用了ifelse语句的复合形式;方法语句的复合形式;方法3则通过大则通过大括号括号对对ifelse进行匹配来实现闰年的判断。可以进行匹配来实现闰年的判断。可以根据程序对比这根据程序对比这3种方法,体会其中的联系和区别,种方法,体会其中的联系和区别,在不同的场合选用适当的方法。在不同的场合选用适当的方法。虽虽然然嵌嵌套套的的条条件件语语句句可可实实现现多多个个分分支支处处理理,但但嵌嵌套套太太多多时时容容易易出出错错和和混混乱乱,这这时时可可以以使使用用开开关关语语句句switch
7、处处理理。实实际际上上开开关关语语句句switch也也是是一一种种ifelse结结构构,不不过过它它使使你你在在编编程程时时很很容容易易写写出出判判断断条条件件,特特别别是是有有很多条件选项的时候。很多条件选项的时候。开关语句开关语句switch的语法格式为:的语法格式为:switch(表达式表达式)case常量常量1:语句语句1;break;3.2.4switch开关语句开关语句case常量常量2:语句语句2;break;.default:语句语句n;其中其中switch、case、default是关键字,是关键字,default子句可子句可以省略。开关语句先计算表达式,然后将表达式值与以省
8、略。开关语句先计算表达式,然后将表达式值与各个常量比较,如果表达式值与某个常量相等,就执各个常量比较,如果表达式值与某个常量相等,就执行该常量后面的语句;如果都不相等,就执行行该常量后面的语句;如果都不相等,就执行default下面的语句。如果无下面的语句。如果无default子句,就什么都不执行,子句,就什么都不执行,直接跳出开关语句。直接跳出开关语句。使用开关语句时,注意以下几点:使用开关语句时,注意以下几点:case后后面面的的常常量量必必须须是是整整数数或或字字符符型型,而而且且不不能能有有相同的值;相同的值;通常在每一个通常在每一个case中都应使用中都应使用break语句提供一个出
9、语句提供一个出口,使流程跳出开关语句。否则,在第一个满足条件口,使流程跳出开关语句。否则,在第一个满足条件case后面的所有语句都会被执行,这种情况叫做落空。后面的所有语句都会被执行,这种情况叫做落空。例例3.5有有break语语句句的的switch结结构构示示例例。本本程程序序当当温温度度变变量量c小小于于10时时,显显示示“有有点点冷冷”;c小小于于25时时,显显示示“合合适适”;c大大于于25且且小小于于35时时,显显示示“有有点点热热”;c大大于于35时时,显显示示“太太热热了了”。输输出出结结果果为为c等于等于28时的情况如图时的情况如图3.3所示。所示。图图3.3publiccla
10、ssW1publicstaticvoidmain(Stringargs)intc=28;switch(c10?1:c25?2:c35?3:4)case1:System.out.println(+c+有点冷有点冷);break;case2:System.out.println(+c+合适合适);break;case3:System.out.println(+c+有点热有点热);break;default:System.out.println(+c+太热了太热了);例例3.6无无break语语句句的的switch结结构构示示例例,输输出出结结果果如如图图3.4所示。所示。图图3.4publiccl
11、assW2publicstaticvoidmain(Stringargs)intc=28;switch(c10?1:c25?2:c35?3:4)case1:System.out.println(+c+有点冷有点冷);case2:System.out.println(+c+合适合适);case3:System.out.println(+c+有点热有点热);default:System.out.println(+c+太热了太热了);循循环环可可使使程程序序根根据据一一定定的的条条件件重重复复执执行行某某一一部部分分程程序序代码,直到满足终止循环条件为止。代码,直到满足终止循环条件为止。Java中提
12、供的循环语句有:中提供的循环语句有:确定次数循环(确定次数循环(for)、)、条件循环(条件循环(while)、)、先执行后判定循环(先执行后判定循环(do)。)。3.3循环语句循环语句如如果果希希望望程程序序的的一一部部分分内内容容按按固固定定的的次次数数重重复复执执行行,通通常常可可以以使使用用for循循环环。for循循环环采采用用一一个个计计数数器器控控制制循循环环次次数数,每每循循环环一一次次计计数数器器就就计计数数,直直到到完完成成给给定定的循环次数为止。的循环次数为止。3.3.1for循环语句循环语句例例3.7对对一一维维数数组组中中的的每每个个元元素素赋赋值值,然然后后按按逆逆序
13、序输输出,结果如图出,结果如图3.5所示。所示。publicclassA2publicstaticvoidmain(Stringargs)inti;inta=newint5;for(i=0;i=0;i-)System.out.println(a+i+=+ai);图图3.5例例3.8按按5的的增增量量打打印印出出一一个个从从摄摄氏氏度度到到华华氏氏度度的的转转换表,输出结果如图换表,输出结果如图3.6所示。所示。classCtoFpublicstaticvoidmain(Stringargs)intfahr,cels;System.out.println(摄氏度摄氏度华氏度华氏度);for(ce
14、ls=0;cels=40;cels+=5)fahr=cels*9/5+32;System.out.println(+cels+fahr);图图3.6for循环的语法格式为:循环的语法格式为:for(表达式表达式1;表达式表达式2;表达式表达式3)循环体循环体其中表达式其中表达式1可以给出计数器的初值,是一个赋值语可以给出计数器的初值,是一个赋值语句;表达式句;表达式2指出循环结束条件,是一个逻辑表达式;指出循环结束条件,是一个逻辑表达式;表达式表达式3指出计数器每次的增量,是一个赋值语句。指出计数器每次的增量,是一个赋值语句。注注意意:计计数数器器可可在在for语语句句之之前前定定义义,也也可
15、可在在循循环环括括号号中中定定义义。计计数数器器增增量量为为1时时常常写写成成增增量量运运算算的的形形式式,以以加加快快运运算算速速度度。根根据据需需要要,增增量量可可以以大大于于或或小小于于1。增增量量计计算算也也可可以以放放在在循循环环体体中中进进行行,即即把把表表达达式式3移移到循环体内的适当位置,原位置为空。到循环体内的适当位置,原位置为空。使用循环语句时常常会遇到死循环的情况,也就是无使用循环语句时常常会遇到死循环的情况,也就是无限制地循环下去。所以在使用限制地循环下去。所以在使用for循环时,要注意初循环时,要注意初值、终值和增量的搭配。终值大于初值时,增量应为值、终值和增量的搭配
16、。终值大于初值时,增量应为正值,终值小于初值时,增量应为负值。编程时必须正值,终值小于初值时,增量应为负值。编程时必须密切关注计数器的改变,这是实现正常循环避免陷入密切关注计数器的改变,这是实现正常循环避免陷入死循环的关键。死循环的关键。while循环不像循环不像for循环那么复杂,循环那么复杂,while循环只需要一循环只需要一个条件判断语句,便可以进行循环操作。个条件判断语句,便可以进行循环操作。3.3.2while循环语句循环语句例例3.9下下面面这这个个程程序序可可接接受受从从键键盘盘输输入入的的数数字字1、2、3,并并显显示示得得到到的的奖奖品品;如如果果输输入入其其他他数数字字则则
17、显显示示字字符符“没没有有奖奖品品给给你你!”。其其中中使使用用了了开开关关语语句句和和while循循环语句。输出结果如图环语句。输出结果如图3.7所示。所示。importjava.io.*;classGetBonuspublicstaticvoidmain(Stringargs)throwsIOExceptioncharch;System.out.println(按按1/2/3数字键可得大奖数字键可得大奖!);System.out.println(按空格键后回车可退出循环操作。按空格键后回车可退出循环操作。);while(ch=(char)System.in.read()!=)System.
18、in.skip(2);/跳过回车键跳过回车键switch(ch)case1:System.out.println(你得到一辆车你得到一辆车!);break;case2:System.out.println(你得到一台彩电你得到一台彩电!);break;case3:System.out.println(你得到一台冰箱你得到一台冰箱!);break;default:System.out.println(没有奖品给你没有奖品给你!);图图3.7while循环的语法格式为:循环的语法格式为:while(条件表达式条件表达式)循环体循环体其其中中while是是关关键键字字。每每次次循循环环之之前前都都要
19、要计计算算条条件件表表达达式式,其其值值为为true时时,就就执执行行一一次次循循环环体体中中的的语语句句,然然后后再再计计算算条条件件表表达达式式,决决定定是是否否再再次次执执行行循循环环体体中中的的语语句句;如如果果条条件件表表达达式式的的值值为为false时时,就就跳跳出出循循环环体,执行循环体下面的语句。体,执行循环体下面的语句。注意:注意:while循环中的条件表达式是逻辑表达式,所循环中的条件表达式是逻辑表达式,所以循环体中一定要有改变条件表达式值的语句,使条以循环体中一定要有改变条件表达式值的语句,使条件表达式的值有机会变为件表达式的值有机会变为false,否则会陷入死循环。否则
20、会陷入死循环。dowhile循循环环与与while循循环环相相反反,是是先先执执行行循循环环体体中中的的语语句句,再再计计算算while后后面面的的条条件件表表达达式式,若若条条件件表表达式值为达式值为false则跳出循环;否则继续下一轮循环。则跳出循环;否则继续下一轮循环。有些情况下,不管条件表达式的值是为有些情况下,不管条件表达式的值是为true还是还是false,都希望把指定的语句至少执行一次,那么就应使用都希望把指定的语句至少执行一次,那么就应使用dowhile循环。循环。3.3.3dowhile循环语句循环语句例例3.10求求12+100之和,输出结果如图之和,输出结果如图3.8所示
21、。所示。classSumpublicstaticvoidmain(Stringargs)intn=1;intsum=0;dosum+=n+;while(n0)sum=0;for(inti=1;i=10)break;System.out.println(i为为+i+时循环结束时循环结束);图图3.10标标号号是是标标记记程程序序位位置置的的标标识识符符。break语语句句只只能能跳跳转转到到循循环环语语句句下下面面的的第第一一条条语语句句上上,而而带带标标号号的的break语语句句可可直直接接跳跳转转到到标标号号处处。正正常常的的break只只退退出出一一重重循循环环,如如果果要要退退出出多多重
22、重循循环环,可可以以使使用用带带标标号号的的break语句。它的语法格式为:语句。它的语法格式为:标识符标识符:break标识符标识符;3.4.2带标号的带标号的break语句语句例例3.13带带标标号号的的break语语句句的的使使用用示示例例。运运行行该该程程序序,正正常常情情况况下下可可从从键键盘盘接接受受16个个输输入入字字符符,但但当当输输入入b按按回回车车时时,breaklab1语语句句就就会会结结束束二二重重循循环环。输输出出结果如图结果如图3.11所示。所示。classB1publicstaticvoidmain(Stringargs)throwsjava.io.IOExcep
23、tioncharch;lab1:/此处为标号标识符此处为标号标识符for(inti=0;i4;i+)for(intj=0;j4;j+)ch=(char)System.in.read();System.in.skip(2);if(ch=b)breaklab1;/跳到标号标识符处跳到标号标识符处if(ch=c)System.out.println(继续继续);System.out.println(结束两重循环结束两重循环);图图3.11continue语句只能用在循环结构中,它跳过循环体中语句只能用在循环结构中,它跳过循环体中尚未执行的语句,重新开始下一轮循环,从循环体第尚未执行的语句,重新开始下
24、一轮循环,从循环体第一个语句开始执行。一个语句开始执行。3.4.3continue语句语句例例3.14下下面面的的程程序序可可以以输输出出19中中除除6以以外外所所有有偶偶数数的平方值,输出结果如图的平方值,输出结果如图3.12所示。所示。classC2publicstaticvoidmain(Stringargs)for(inti=2;i=9;i+=2)if(i=6)continue;System.out.println(i+的平方的平方=+i*i);图图3.12Java也也支支持持带带标标号号的的continue语语句句,它它通通常常用用在在嵌嵌套套循循环环的的内内循循环环中中,可可以以用
25、用标标号号标标出出想想跳跳到到哪哪一一条条语语句句继续重复执行程序。其语法格式为:继续重复执行程序。其语法格式为:标识符标识符:continue标识符标识符;3.4.4带标号的带标号的continue语句语句例例3.15带带标标号号的的continue语语句句的的使使用用示示例例,输输出出结结果果如图如图3.13所示。所示。classC3publicstaticvoidmain(Stringargs)lab1:for(inti=1;i=3;i+)for(intj=1;j3)System.out.println(Continue);continuelab1;System.out.println(
26、i=+i+j=+j);图图3.13例例3.16求求100200间间的的所所有有素素数数。该该例例通通过过一一个个嵌嵌套套的的for循环来实现,输出结果如图循环来实现,输出结果如图3.14所示。所示。publicclassFindpublicstaticvoidmain(Stringargs)System.out.println(*100200间的所有素数间的所有素数*);intn=0;outer:for(inti=101;i200;i+=2)intk=15;for(intj=2;j=k;j+)if(i%j=0)continueouter;System.out.print(+i);n+;if(n
27、0)System.out.println(第一第一);elseif(x-3)System.out.println(第二第二);elseSystem.out.println(第三第三);判判断断x的的取取值值在在什什么么范范围围内内时时将将打打印印字字符符串串“第第二二”?A.x0B.x-3C.x=-3D.x-33-3编编写写程程序序,根根据据考考试试成成绩绩的的等等级级打打印印出出百百分分制制分分数数段段。设设:A为为90分分以以上上,B为为80分分以以上上,C为为70分分以以上上,D为为60分分以以上上,E为为59分分以以下下。要要求求在在程程序序中中使用开关语句。使用开关语句。3-4编写程
28、序,从编写程序,从10个数中找出最大值。个数中找出最大值。3-5编写程序,计算编写程序,计算n的阶乘(的阶乘(n!),),设设n10。3-6编编 写写 程程 序序,计计 算算 数数 学学 常常 数数 e的的 值值,e=1+1/1!+1/2!+1/3!+。3-7编写程序,输出以下数据:编写程序,输出以下数据:N10N100N1000N 110100100022020020003303003000440400400055050050003-8编写程序,输出乘法口诀。编写程序,输出乘法口诀。3-9编写程序,输出编写程序,输出1100间的所有奇数。间的所有奇数。3-10以下程序的输出结果是什么?以下程
29、序的输出结果是什么?publicclassTest1publicstaticvoidmain(Stringargs)inty,x=1,total=0;while(x=10)y=x*x;System.out.println(y);total+=y;+x;System.out.println(totalis+total);3-11以下程序的输出结果是什么?以下程序的输出结果是什么?publicclassTest2publicstaticvoidmain(Stringargs)intcount=1;while(count=10)System.out.println(count%2=1?*:+);+count;3-12完完成成下下面面的的程程序序,利利用用break语语句句和和带带标标号号的的break语句分别退出一重循环和二重循环。语句分别退出一重循环和二重循环。for(i=0;i10;i+)intj=i*10while(j100)if(j=10)break;j=j+5;
限制150内