java网络程序设计第二章-part_第1页
java网络程序设计第二章-part_第2页
java网络程序设计第二章-part_第3页
java网络程序设计第二章-part_第4页
java网络程序设计第二章-part_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第2章 Java语言基础孙伟信息工程学院本章概要Java语言概述数据类型及其运算程序控制语句方法一维数组和多维数组字符串和文本I/O面向对象技术基础(对象和类)面向对象高级技术(继承与多态)抽象类与接口图形用户界面基础事件驱动程序设计异常处理Java类库Part3 程序流程控制3.1 选择结构程序设计3.2 循环结构程序设计3.3 break和continue语句3.1 选择结构程序设计 Java语言提供了两条基本的分支选择语句:if语句和switch语句。用这两个语句可以形成以下三种形式的选择结构: (1) 双分支选择结构:if/else语句用来判定一个条件(布尔表达式),当条件为真(tru

2、e)时执行一个操作,条件为假(false)时执行另一个操作。 (2) 单分支选择结构:省略了else的if语句在条件为真时执行一个操作,条件为假时则跳过该操作。 (3) 多分支选择结构:switch语句则是根据表达式的值来决定执行许多不同操作中的某一个操作。当然,使用嵌套if语句也可以实现多分支选择结构。3.1.1 if语句 if语句是构造分支选择结构程序的基本语句。使用if语句的基本形式,可构造双分支选择结构程序;使用省略了else的if语句可构造单分支选择结构程序;使用嵌套if语句可构造多分支选择结构程序。下面分别讲述这几种形式。 1if语句的基本形式if语句的基本形式如下:if(布尔表达

3、式) 语句区块1else 语句区块2图3.1 if语句的基本形式布尔表达式语句区块2语句区块1说明: (1) 这里的“布尔表达式”为关系表达式或逻辑表达式(以下同)。 (2) “语句区块”是指一个语句或多个语句,当为多个语句时,一定要用一对花括号“”和“”将其括起,使之成为一个复合语句。例如,在下面程序的if语句中,关系表达式grade=60为true时,执行“语句区块1”,它由两个语句构成,所以使用了一对花括号使其构成一个复合语句,否则,编译时会指出语法错误;而当关系表达式grade=60为false时,执行“语句区块2”,它只有一个语句,可以省去花括号。 【示例程序c3_1.java】 判

4、断给出的一个成绩,输出 “通过”或“不及格”。public class c3_1 public static void main(String args) int grade; grade=86; /读者在调试时也可赋一个小于60的成绩试试看/* 此处最好是使用一个数据输入语句,但Java从键盘读取整数或浮点数时要使用类、对象、方法等知识。限于我们目前所学,此处用了一个赋值语句,待读者学习了第四章后,可对该程序进行相应地修改,使其适应于各种情况 */ if(grade=60) System.out.print(通过,成绩是:); System.out.println(grade); else

5、System.out.println(不及格); 程序的运行结果是:通过,成绩是:86【示例程序c3_2.java】 比较两个数的大小。import java.awt.*;import java.applet.*;public class c3_2 extends Applet public void paint(Graphics g) double d1=43.4; double d2=85.3; if(d1=d2) g.drawString(d1+ = +d2,25,25); else g.drawString(d1+ +d2,25,25);该程序的运行结果是:43.485.3 2. 省略

6、了else子句的if语句 在if语句中,可以省略else子句以形成单分支结构。其形式如下: if(布尔表达式)语句区块 其执行流程如图3.2所示。图3.2 if语句中省略了else子句的形式语句区块布尔表达式 【示例程序c3_3.java】 判断给出的一个成绩,当成绩小于60时,输出“未通过”及具体成绩,其他情况什么也不输出。public class c3_3 public static void main(String args) int grade; grade=56; /读者在调试时也可赋一个等于或大于60的成绩试试看 if(grade=90)System.out.println(成绩:

7、优); 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(成绩:不及格); 程序的运行结果是:成绩: 中等 4. 使用if嵌套时的注意事项 (1) Java编译器是将else与离它最近的if组合在一起,除非用花括号指定不同的匹配方式。例如下面这个程序,作者的意图是当x和y都大于6时,输出设备正常的信息;而当x不大于6时,输出设备出错的信息

8、。但程序执行时,只有当x大于6,且y小于等于6时才输出设备出错的信息;x不大于6时什么信息也不输出。【示例程序c3_5.java】public class c3_5 public static void main(String args) int x,y; x=3;y=14; if(x6) if(y6) System.out.println(设备正常); else System.out.println(设备出错); 程序运行后没有输出,与作者的意图相悖。如果希望if嵌套按作者的意图执行,则必须用花括号将内嵌的if结构括起,写为: if(x6) if(y6) System.out.println

9、(设备正常); else System.out.println(设备出错);这样,用花括号“”将第二个if结构括起,向编译器表明它是一个省略了else的if语句,而程序中的else与第一个if结构相对应。 (2) 在嵌套if语句中,同样要注意每个“语句区块”只能是“一个语句”,当“语句区块”中包含多条语句时,必须用花括号“”将这些语句括起来,使其构成一个复合语句,否则会导致语法错误或错误的输出。例如,下面的嵌套if语句当x6时,则不论y的值如何,总会执行第二个输出语句,它可能与作者的意图相悖。if(x6) if(y6) System.out.print(x=+x); System.out.pr

10、int(y=+x);3.1.2 switch语句 当要从多个分支中选择一个分支去执行,虽然可用if嵌套语句来解决,但当嵌套层数较多时,程序的可读性大大降低。Java提供的switch语句可清楚地处理多分支选择问题。switch语句根据表达式的值来执行多个操作中的一个,其格式如下:switch(表达式) case 值1:语句区块1;break; /分支1 case 值2:语句区块2;break; /分支2 case 值n:语句区块n;break; /分支n default : 语句区块n+1; /分支n+1图3.4 switch语句流程控制(虚线箭头指出缺少break语句时的流程走向)说明: (

11、1) switch后面的表达式的类型可以是byte,char,short和int(不允许浮点数类型和long型); (2) case后面的值1、值2、值n是与表达式类型相同的常量,但它们之间的值应各不相同,否则就会出现相互矛盾的情况。case后面的语句块可以不用花括号括起。 (3) default语句可以省去不要。 (4) 当表达式的值与某个case后面的常量值相等时,就执行此case后面的语句块。 (5) 若去掉break语句,则执行完第一个匹配case后的语句块后,会继续执行其余case后的语句块,而不管这些语句块前的case值是否匹配,见图3.4虚线所示。【示例程序c3_6.java】

12、判断成绩等级。import java.awt.*;import java.applet.*;public class c3_6 extends Applet public void paint(Graphics g) int k; int grade=86; k=grade/10; switch(k) case 10: case 9: g.drawString(成绩:优,25,25); break; case 8: case 7: g.drawString(成绩:良,25,25); break; case 6: g.drawString(成绩:及格。,25,25); break; defaul

13、t: g.drawString(成绩:不及格。,25,25); 该程序的运行结果是:成绩:良3.1.3 条件运算符 对于一些简单的if/else语句,可用条件运算符来替代。例如,若有以下if语句:if (xy) m=x;else m=y;则可用下面的条件运算符来替代:m=(xy)?x :y 其中,“?:”被称为条件运算符;“(xy)?x :y”被称为条件表达式。条件表达式的语义是:若(xy)条件为true,则表达式的值取x的值,否则表达式的值取y的值。条件表达式的一般形式为: 布尔表达式1?表达式2 :表达式3 在条件表达式中: (1) 表达式2和表达式3的类型必须相同。 (2) 条件运算符的

14、执行顺序是:先求解表达式1,若值为true则执行表达式2,此时表达式2的值作为整个条件表达式的值,否则求解表达式3,将表达式3的值作为整个条件表达式的值。 在实际应用中,常常将条件运算符与赋值运算符结合起来,构成赋值表达式,以替代比较简单的if/else语句。条件运算符的优先级高于赋值运算符,因此,其结合方向为“自右至左”。【示例程序c3_7.java】public class c3_7 public static void main(String args ) int x,y,z,a,b; a=1; b=2; x=(ab) ? a : b; y=(a!=b) ? a : b; z=(ab)

15、? a : b; System.out.print(tx=+x); System.out.print(ty=+y); System.out.println(tz=+z); 运行结果是:x=2 y=1 z=13.2 循环结构程序设计 循环语句的作用是反复执行一段程序代码,直到满足终止条件为止。Java语言提供的循环语句有:while语句、do-while语句和for语句。这些循环语句各有其持点,用户可根据不同的需要选择使用。3.2.1 while语句while语句的一般形式为:while(布尔表达式) 循环体语句区块 while语句中各个成分的执行次序是:先判断布尔表达式的值,若值为假,则跳过循

16、环体,执行循环体后面的语句;若布尔表达式的值为true,则执行循环体中的语句区块,然后再回去判断布尔表达式的值,如此反复,直至布尔表达式的值为false,跳出while循环体。其执行流程如图3.5所示。图3.5 while循环结构流程图循环体语句区块布尔表达式【示例程序c3_8.java】 打印数字15。public class c3_8 public static void main(String args) int counter=1; /循环变量及其初始值 while(counter=5) /循环条件 System.out.println(counter=+counter); count

17、er+; /循环变量增值 该程序的运行结果如下:counter=1counter=2counter=3counter=4counter=5图3.6 do-while循环结构流程图循环体语句区块布尔表达式3.2.2 do-while语句do-while语句的一般形式为:do 循环体语句区块 while(布尔表达式) do-while语句中各个成分的执行次序是:先执行一次循环体语句区块,然后再判断布尔表达式的值,若值为false则跳出do-while循环,执行后面的语句;若值为true则再次执行循环体语句区块。如此反复,直到布尔表达式的值为false,跳出do-while循环为止。其执行流程如图3

18、.6所示。 do-while循环语句与while循环语句的区别仅在于do-while循环中的循环体至少执行一次,而while循环中的循环体可能一次也不执行。 【示例程序c3_9.java】 计算从1开始的连续n个自然数之和,当其和值刚好超过100时结束,求这个n值。import java.awt.*;import java.applet.*;public class c3_9 extends Applet public void paint(Graphics g) int n=0; int sum=0; /循环变量及其初始值 do n+; sum+=n; /循环变量增值 while(sum=1

19、00); /循环条件 g.drawString(sum=+sum,25,25); g.drawString(n=+n,100,25); 该程序的运行结果是:sum=105 n=143.2.3 for语句for语句的一般形式为:for(初值表达式;布尔表达式;循环过程表达式)循环体程序语句区块其中:初值表达式对循环变量赋初值;布尔表达式用来判断循环是否继续进行;循环过程表达式完成修改循环变量、改变循环条件的任务。图3.7 for循环流程图初值表达式布尔表达式循环体语句区块循环过程表达式 其中:初值表达式对循环变量赋初值;布尔表达式用来判断循环是否继续进行;循环过程表达式完成修改循环变量、改变循环

20、条件的任务。 For语句的执行流程见图3.7。其执行过程是: (1) 求解初值表达式; (2) 求解布尔表达式,若值为真,则执行循环体语句区块,然后再执行第(3)步;若值为假,则跳出循环体语句。 (3) 求解循环过程表达式,然后转去执行第(2)步。【示例程序c3_10.java】 求自然数1100之间所有奇数之和。public class c3_10 public static void main(String args) int sum=0,odd; for(odd=1;odd=100;odd+=2) sum +=odd; System.out.println(sum=+sum+ odd=+

21、odd); 该程序的运行结果是:sum=2500 odd=101 【示例程序c3_11.java】 求解Fibonacci数列:1,1,2,3,5,8,的前36个数。 分析该数列可以得到构造该数列的递推关系是:F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3)将其写成如下的Java程序。public class c3_11 public static void main(String args) int f1=1, f2=1; /f1为第一项,即奇位项;f2为第二项,即偶位项 for( int i=1; i10) break; /布尔表达式写在了循环体内的if语句中 S

22、ystem.out.println(sum=+sum); 该程序的运行结果是:sum=55 此外,在for结构头的构件中,“初值表达式”和“循环过程表达式”中还可以使用逗号运算符。这也是Java中唯一使用逗号运算符的地方。 【示例程序c3_13.java】 在for循环的初值表达式中使用逗号运算符。public class c3_13 public static void main(String args) int i,sum; for(i=1,sum=0;i10)break; /循环体改成了判定跳转语句 System.out.println(sum=+sum); 该程序的运行结果是:sum=

23、653.2.5 循环语句比较 前面通过示例程序讲述了三种循环语句的用法。一般情况下,Java系统提供的三种循环语句是可以相互替代的,尤其是对于那些确切地知道所需执行次数的循环。然而,由于for语句头中包含了控制循环所需要的各个构件,因此,对于同样的问题,使用for循环编写的程序最简洁清晰。如果读者将求自然数110之和的问题分别用三种循环结构写出,就可以清楚地看到这一事实。对于那些只知道某些语句要反复执行多次(至少执行一次),但不知道确切的执行次数时,使用dowhile循环会使程序更清晰。对于那种某些语句可能要反复执行多次,也可能一次都不执行的问题,当然是使用while循环最好了。3.2.6 循

24、环控制要点 循环控制主要有两种办法,一是用计数器控制循环,另一种是用标记控制循环。 大多数循环结构程序是利用计数器的原理来控制的。设计计数器控制循环的程序,需要把握下面几个要点:(1) 循环控制变量(或循环计数器)的名字,即循环变量名。(2) 循环控制变量的初始值。(3) 每执行一次循环时,循环控制变量的增量(或减量)。(4) 测试循环控制变量的终值条件(即是否继续进行循环)。 仔细分析前面的示例程序,可以看出,用三种不同的循环语句编写的程序中,都具有上述四个方面的内容,其中以for语句最为典型,它把所有这些构件都放在了for头中,图3.8明确地指出这些方面。 标记控制循环主要适用于那些事先无

25、法知道循环次数的事务处理。例如统计选票就是这样一类问题,只知道有许多人参加投票,但不能确切地知道选票数。在这种情况下可以使用一个叫做标记值的特殊值作为“数据输入结束”的标志,用户将所有合法的数据都输入之后,就输入这个标记值,表示最后一个数据已经输入完了。循环控制语句得到这个标记值后,结束循环。标记控制循环通常也称作不确定循环,因为在循环开始执行之前并不知道循环的次数。下面的程序使用“#”作为循环控制标记。图3.8 一个典型for头的组成构件关键字for循环控制变量名控制变量初始值控制变量最终值控制变量递增for ( int odd = 1 ; odd = 100; odd+=2) 【示例程序c

26、3_15.java】 设有李、王、张三人竞选领导,由群众投票表决,试设计一个统计选票的程序。import java.io.*;public class c3_15 public static void main(String args)throws IOException BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in);/上面一条语句是有关键盘输入数据流处理的,详细内容将在第12章讲解 int Ltotal=0,Wtotal=0,Ztotal=0; char name; String c1; Sy

27、stem.out.print(enter letter L or W or Z name, # to end:); c1=keyin.readLine( );/从键盘上读取一个字符串赋给c1 name=c1.charAt(0);/ charAt(0)是从一个字符串中截取第0个字符的方法 while(name!=#) switch(name) case L: case l: /李姓人的得票, 列出两个case分别处理大、小写字母 Ltotal=Ltotal+1; break; case W: case w: /王姓人的得票 Wtotal=Wtotal+1; break; case Z: case

28、 z: /张姓人的得票 Ztotal=Ztotal+1; break; /switch语句结束 System.out.print(enter letter L or W or Z name ,# to end:); c1=keyin.readLine( ); name=c1.charAt(0); /while循环结束 System.out.println( Ltotal=+Ltotal); System.out.println( Wtotal=+Wtotal); System.out.println( Ztotal=+Ztotal); 该程序的运行结果如下:enter letter L or

29、W or Z name,# to end:Lenter letter L or W or Z name,# to end:lenter letter L or W or Z name ,# to end:Lenter letter L or W or Z name ,# to end:Wenter letter L or W or Z name ,# to end:wenter letter L or W or Z name ,# to end:Zenter letter L or W or Z name ,# to end: # Ltotal=3 Wtotal=2 Ztotal=13.2.7

30、 循环嵌套 循环嵌套是指在循环体内包含有循环语句的情形。Java语言提供的三种循环结构可以自身嵌套,也可以相互嵌套。循环嵌套时应该注意的是:无论哪种嵌套关系都必须保证每一个循环结构的完整性,不能出现交叉。下面几种循环嵌套都是合法的形式:(1) while( ) /外循环开始 (2) for( ; ; ) /外循环开始 while( ) /内循环开始 for( ; ; ) /内循环开始 /内循环结束 /内循环结束 /外循环结束 /外循环结束(3) do /外循环开始 (4) for(; ;) /外循环开始 do /内循环开始 while( ) /内循环开始 /内循环结束 while( ); /内

31、循环结束 while( ); /外循环结束 /外循环结束(5) while( )(6) do do for(; ;) while( ); while( );【示例程序c3_16.java】 编程打印三角形数字图案。public class c3_16 public static void main(String args) for(int i=1;i=10;i+) /外层for循环 for(int j=1;j=11-i;j+) /内嵌for循环 System.out.print( ); /内嵌for循环的循环体 for(int j=1;j=10) System.out.print(+i+ );

32、 else System.out.print(+i+ ); /并列的内嵌for循环结束 System.out.println( ); /外层for循环结束 该程序的执行结果如下: 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10【示例程序c3_17.java】 编写求解 (即1!+2!+3!+7!+8!)的程序。public class c3_17 public static void main(Strin

33、g args) int n=1,m,s,k=0; while(n=8) for(s=1,m=1;m=n;m+) s=s*m; /计算n!,结果存于s中 k=k+s; /计算前n项阶乘之和,结果存于k中 System.out.println(n+!=+s+ k=+k); n+; 程序的运行结果如下:1!=1 k=12!=2 k=33!=6 k=94!=24 k=335!=120 k=1536!=720 k=8737!=5040 k=59138!=40320 k=46233 3.3 break和continue语句3.3.1 break语句break语句通常有不带标号和带标号两种形式:break;

34、break Lab;其中:break是关键字;Lab是用户定义的标号。 break语句虽然可以独立使用,但通常主要用于switch结构和循环结构中,控制程序的执行流程转移。Break语句的应用有下列三种情况: (1) break语句用在switch语句中,其作用是强制退出switch结构,执行switch结构后的语句。这一功能已在3.1.2节中陈述。 (2) break语句用在单层循环结构的循环体中,其作用是强制退出循环结构。若程序中有内外两重循环,而break语句写在内循环中,则执行break语句只能退出内循环,而不能退出外循环。若想要退出外循环,可使用带标号的break语句。 (3) br

35、eak lab语句用在循环语句中,必须在外循环入口语句的前方写上lab标号,可以使程序流程退出标号所指明的外循环。 【示例程序c3_18.java】 求1到100间的素数。 素数也称为质数,是不能被2到比它自身小1的任何正整数整除的自然数,如3,5,7等都是素数。解决该问题的算法可用伪代码描述如下: (1) 构造外循环得到一个1100之间的数i,为减少循环次数,可跳过所有偶数; (2) 构造内循环得到一个2m之间的数j,令m=; 考察i是否能被j整除,若能整除则i不是素数,结束内循环; (3) 内循环结束后判断j是否大于等于m+1,若是,则i必为素数,打印输出之;否则,再次进行外循环。将上述伪代码写成java程序如下:public class c3_18 public static void main(String args) int n=0,m,j,i; for(i=3;i=100;i+=2) /外层循环 m=(int)Math.sqrt(double)i); for(j=2;j=m+1) if(n%6=0)System.out.println(n); /换行控制 Syst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论