方法设计PPT课件

上传人:夏** 文档编号:592265277 上传时间:2024-09-20 格式:PPT 页数:69 大小:203.01KB
返回 下载 相关 举报
方法设计PPT课件_第1页
第1页 / 共69页
方法设计PPT课件_第2页
第2页 / 共69页
方法设计PPT课件_第3页
第3页 / 共69页
方法设计PPT课件_第4页
第4页 / 共69页
方法设计PPT课件_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《方法设计PPT课件》由会员分享,可在线阅读,更多相关《方法设计PPT课件(69页珍藏版)》请在金锄头文库上搜索。

1、第二章 方法设计n n2.1 方法使用基础n n2.2 运算符与表达式n n2.3 流程控制语句n n2.4 算法设计举例2.1方法使用基础n n1.方法的定义n n2.方法调用与参数传递1.方法的定义qq方法首部的声明方法首部的声明 方法修饰符方法修饰符 方法返回值类型方法返回值类型 方法名方法名( (形式参数表形式参数表) )qq方法体方法体 是一个语句序列,具体描述方法的返回值、方法的参数和方是一个语句序列,具体描述方法的返回值、方法的参数和方法在类的成员变量之间的关系,以实现方法的功能。法在类的成员变量之间的关系,以实现方法的功能。qq方法的返回值方法的返回值 是方法向调用值返回的数据

2、。若返回值类型不是是方法向调用值返回的数据。若返回值类型不是void,void,方法体方法体中必须用中必须用returnreturn语句来返回一个方法声明时指定类型的值。语句来返回一个方法声明时指定类型的值。 return return 表达式;表达式; 两个方法声明的例子n n(1) (1) 方法方法 setCNumbersetCNumbervoid void setCNumbersetCNumber( (intint xNumberxNumber) /) /方法首部声明方法首部声明 / /方法体开始方法体开始 cNumbercNumber= =xNumberxNumber; /; /方法体

3、中的语句,描述方法的功能方法体中的语句,描述方法的功能 / /方法体结束方法体结束n n(2) (2) 方法方法 getCNumbergetCNumberintint getCNumbergetCNumber() /() /方法首部声明方法首部声明 / /方法体开始方法体开始 return return cNumbercNumber; /; /将将cNumbercNumber的值作为的值作为getCNumbergetCNumber /方法的返回值方法的返回值 / /方法体结束方法体结束2. 方法的调用与参数传递qq调用对象成员方法的语法形式为调用对象成员方法的语法形式为 对象名对象名对象名对象

4、名. .成员方法名成员方法名成员方法名成员方法名(实际参数表实际参数表实际参数表实际参数表)qq调用对象成员方法的语义是:计算实际参数表调用对象成员方法的语义是:计算实际参数表中各表达式的值,并将它们一一传递给被调用中各表达式的值,并将它们一一传递给被调用方法中对应的形式参数,执行被调用方法的方方法中对应的形式参数,执行被调用方法的方法体。方法调用的结果就是被调用方法的执行法体。方法调用的结果就是被调用方法的执行结果。结果。例2.1 一个实现两个float型数相加的方法class MethodDemo1class MethodDemo1 float add(float x,float y) f

5、loat add(float x,float y) / /建议所取的方法名有助于说明方法的功能,以便阅读程序和记忆建议所取的方法名有助于说明方法的功能,以便阅读程序和记忆 float z; /zfloat z; /z是方法体的局部变量,作用域是是方法体的局部变量,作用域是addadd整个方法的方法体整个方法的方法体 z=x+y;z=x+y; return z; return z; class TryMethodDemo1 /class TryMethodDemo1 /主类主类 public static void main(String public static void main(Stri

6、ng argsargs) MethodDemo1 a=new MethodDemo1(); MethodDemo1 a=new MethodDemo1(); System.out.println(a.add(5,8); System.out.println(a.add(5,8); 运行结果为运行结果为13.013.0例2.2 用对象作为参数传递值的数据相加方法。class class ObjPara ObjPara /定义对象作为参数的类,为便于举例,本方法只有一个成员变量定义对象作为参数的类,为便于举例,本方法只有一个成员变量 float temp; float temp; class Me

7、thodDemo2 class MethodDemo2 void add(float x,float y, void add(float x,float y,ObjParaObjPara z) / z) /方法首部声明,此方法没有返回值方法首部声明,此方法没有返回值 z.temp=x+y; /z.temp=x+y; /将将x+yx+y的结果存入类变量的结果存入类变量z z的成员变量的成员变量temptemp中。中。 class TryMethodDemo2 /class TryMethodDemo2 /主类主类 public static void main(String public sta

8、tic void main(String abcabc) ) ObjParaObjPara b=new b=new ObjParaObjPara();(); MethodDemo2 a=new MethodDemo2(); MethodDemo2 a=new MethodDemo2(); a.add(4,6,b); a.add(4,6,b); System.out. System.out.printlnprintln(b.temp);(b.temp); 运行结果为运行结果为 10.010.0例2.3 方法之间的消息发送与参数传递。class MethodDemo3 class MethodDe

9、mo3 float add(float x,float y) float add(float x,float y) float z; z=x+y; return z; float z; z=x+y; return z; void void callAddcallAdd(float m,float n) (float m,float n) float t; t=add(m,n); float t; t=add(m,n); /* /*向方法向方法addadd发送消息,将参数发送消息,将参数m,nm,n的值分别传递给的值分别传递给x,yx,y,然后执行方法然后执行方法addadd 的方法体,计算的方

10、法体,计算x+yx+y,计算结果作为计算结果作为addadd的返回值传回给的返回值传回给t*/t*/ System.out.print(m+n+=+t); System.out.print(m+n+=+t); class TryMethodDemo3 /class TryMethodDemo3 /主类主类 public static void main(String public static void main(String rgbrgb) ) MethodDemo3 a=new MethodDemo3(); a.callAdd(4,6); MethodDemo3 a=new MethodD

11、emo3(); a.callAdd(4,6); 运行结果为运行结果为 4.0+6.0=10.04.0+6.0=10.0可以不引入变量t,而将本句话改为System.out.print(m+n+=+addSystem.out.print(m+n+=+add(m,n);(m,n);例2.4 对象作为参数值进行消息发送与参数传递class class ObjPara ObjPara float temp; float temp; class MethodDemo4class MethodDemo4 void add(float x,float y, void add(float x,float y,

12、ObjParaObjPara z) z) z.temp=x+y; z.temp=x+y; void void callAddcallAdd(float m,float n) (float m,float n) ObjParaObjPara k=new k=new ObjParaObjPara();(); add(m,n,k); add(m,n,k); System.out.print(m+n+=+k.temp); System.out.print(m+n+=+k.temp); /k.temp /k.temp的值即为的值即为m+n m+n class TryMethodDemo4 /class

13、TryMethodDemo4 /主类主类 public static void main(String public static void main(String jsjjsj) ) MethodDemo4 a=new MethodDemo4(); MethodDemo4 a=new MethodDemo4(); a.callAdd(4,6); a.callAdd(4,6); 运行结果为运行结果为 4.0+6.0=10.04.0+6.0=10.02.2 运算符与表达式n n运算运算对数据进行的操作对数据进行的操作n n运算符运算符表示各种不同运算的符号表示各种不同运算的符号n n操作数操作数

14、( (operand)operand)参与运算的数据参与运算的数据n n表达式表达式( (Expression)Expression)由操作数和运算符按由操作数和运算符按一定的语法形式组成的有意义的符号序列。最一定的语法形式组成的有意义的符号序列。最简单的表达式只有一个最终变量或变量名。简单的表达式只有一个最终变量或变量名。n n常用的运算有:赋值运算,算术运算,关系运常用的运算有:赋值运算,算术运算,关系运算,逻辑运算,位运算,三元运算,对象运算。算,逻辑运算,位运算,三元运算,对象运算。下面分别进行介绍。下面分别进行介绍。Java语言的运算符(按优先级降序排列)n n一元运算一元运算 +

15、- + - ! () + - + - ! () 右结合右结合n n算术运算算术运算 * * / % + - / % + - n n移位运算移位运算 n n比较运算比较运算 = = instanceof instanceof = != !=n n按位运算按位运算 & |& |n n短路运算短路运算 & |& |n n条件条件( (三元三元) )运算运算 ?: ?: 右结合右结合n n赋值运算赋值运算 = “= “op=”(op=”(复合赋值运算复合赋值运算) ) 右结合右结合“+”-”代表正负号“()”代表强制类型转换1.赋值运算n n赋值运算赋值运算用于修改变量内容。一般形式为用于修改变量内容

16、。一般形式为 变量变量变量变量=表达式;计算出右边表达式的值赋给左边表达式;计算出右边表达式的值赋给左边表达式;计算出右边表达式的值赋给左边表达式;计算出右边表达式的值赋给左边的变量。如:的变量。如:的变量。如:的变量。如:a=2+3-1a=2+3-1n n复合赋值运算复合赋值运算复合赋值运算复合赋值运算“=”op=”,集成计算和赋值集成计算和赋值集成计算和赋值集成计算和赋值两大功能。两大功能。两大功能。两大功能。op可以是任何二元的非布尔型的可以是任何二元的非布尔型的可以是任何二元的非布尔型的可以是任何二元的非布尔型的运算符。如:运算符。如:运算符。如:运算符。如:* *=,/=/=,%=%

17、=,+=+=,-=,-=, x+=8x=x+8x+=8x=x+8 a*=b+2a=a*(b+2) a*=b+2a=a*(b+2)2. 算术运算n n算术运算作用于整数和浮点数。按操作数个数可算术运算作用于整数和浮点数。按操作数个数可分为一元运算和二元运算。分为一元运算和二元运算。n n一元算术运算符:一元算术运算符:+ - + -+ - + -。+ +和和- -表示正负号。表示正负号。+和和- -分分别称为增别称为增1 1运算和减运算和减1 1运算,有前缀和运算,有前缀和后缀两种形式,如后缀两种形式,如x+,+xx+,+x。二者的区别在于运二者的区别在于运算和取值的顺序。算和取值的顺序。n n

18、+和和- -只只能作用于变量,而不能是字面量或表能作用于变量,而不能是字面量或表达式。如达式。如20+20+,( (x+y)-x+y)-是非法的。是非法的。n n二元算术运算符:二元算术运算符:+ - * / %+ - * / %。其中。其中“ “%”%”是取模是取模运算。运算。x1%x2x1%x2表示求操作数表示求操作数x1x1除以除以x2x2的余数。的余数。算术运算符说明n n如果两个操作数都是整数,则如果两个操作数都是整数,则“ “/”/”表示整除,即舍弃小表示整除,即舍弃小数部分,只保留整数部分数部分,只保留整数部分( (不是四舍五入不是四舍五入) )。如:如:8/4,9/4,10/4

19、8/4,9/4,10/4结果均为结果均为2 2;2/42/4,3/53/5结果都是结果都是0 0。n n对于浮点运算对于浮点运算( (至少有一个操作数为浮点数至少有一个操作数为浮点数) ),a%ba%b的结的结果是除完后剩下的浮点数部分果是除完后剩下的浮点数部分, , 即即a%ba%b等价于等价于a-a-(intint)(a/b)*b)(a/b)*b)。例如:例如:7.6%2.9=7.6-2.9*2=1.87.6%2.9=7.6-2.9*2=1.8n n在取模运算时,若操作数中有一个是负数,则采取如下在取模运算时,若操作数中有一个是负数,则采取如下规则:先忽略操作数的符号来计算结果,然后取规则

20、:先忽略操作数的符号来计算结果,然后取“ “%”%”左左边操作数的符号作为结果的符号。如:边操作数的符号作为结果的符号。如: 5%2=1 5%2=1 -5%2=-1 5%-2=1 -5%-2=-1-5%2=-1 5%-2=1 -5%-2=-1n n通过算术运算符将运算对象连接起来的式子,称为通过算术运算符将运算对象连接起来的式子,称为算术算术算术算术表达式表达式表达式表达式。如:。如:3+2 , 3+2 , a/(b+c)-d , (x+1)/(y-2)+x*ya/(b+c)-d , (x+1)/(y-2)+x*y例2.5 算术运算举例:ArithmaticOp.javapublic clas

21、s public class ArithmaticOpArithmaticOp public static void main(String public static void main(String kkjkkj) ) intint a=5,b=3; a=5,b=3; intint c=+a/b; c=+a/b; intint c2=a-/b; c2=a-/b; intint c3=a*2%b; c3=a*2%b; double d=2.5; double d=2.5; double d2=d%3; double d2=d%3; System.out. System.out.println

22、println(c=+c);(c=+c); System.out.println(c2=+c2); System.out.println(c2=+c2); System.out.println(c3=+c3); System.out.println(c3=+c3); System.out.println(d2=+d2); System.out.println(d2=+d2); 运行结果为:c=2c2=2c3=1d2=2.53.关系运算n n关系运算又称为比较运算,它的运算结果是一个布尔关系运算又称为比较运算,它的运算结果是一个布尔型值。比较的结果为真型值。比较的结果为真( (true)true

23、)或假或假( (false).false).n n关系运算都是二元运算关系运算都是二元运算: ,=,=,5 , 35 , az ,x+y!=za = = =适适用于操作数为整数、浮点数或字符的类型,布尔型只用于操作数为整数、浮点数或字符的类型,布尔型只能用在能用在=或或!=!=比较。比较。 n n关系运算符本身连接的表达式不能是关系表达式。如关系运算符本身连接的表达式不能是关系表达式。如 xyzxy2; x; x=52;n n“=”“=”和和 “=” “=”的区分的区分n n关系运算举例关系运算举例例2.6 关系运算举例:RelationOp.javapublic class public c

24、lass RelationOpRelationOp public static void main(String app) public static void main(String app) intint a=25,b=3; a=25,b=3; booleanboolean d=ab; d=ab; booleanboolean d1=3.52.6; d1=3.52.6; booleanboolean d2=A=A; d2=A=a*2-b*9; e=a=a*2-b*9; System.out. System.out.printlnprintln(d=+d);(d=+d); System.ou

25、t.println(d1=+d1); System.out.println(d1=+d1); System.out.println(d2=+d2); System.out.println(d2=+d2); System.out.println(d3=+d3); System.out.println(d3=+d3); System.out. System.out.printlnprintln(e=+e);(e=+e); 运行结果:d= trued1= falsed2= trued3= truee = true4.逻辑运算n n逻辑运算可以将几个关系表达式或者布尔值连接起来,逻辑运算可以将几个关系

26、表达式或者布尔值连接起来,表示一个较复杂的条件。表示一个较复杂的条件。n n逻辑运算符:逻辑运算符: !( (逻辑非逻辑非)!)!op1 op1 一元一元 &( &(逻辑与逻辑与)op1&op2 op1&op2 二元二元 |(|(逻辑或逻辑或)op1|op2 op1|op2 二元二元n n“ “&”&”和和“ “|”|”又叫做又叫做短路运算符短路运算符短路运算符短路运算符。n n逻辑运算的运算对象必须是布尔值类型的表达式,运逻辑运算的运算对象必须是布尔值类型的表达式,运算结果也是布尔型数据。算结果也是布尔型数据。n n逻辑表达式由逻辑运算符、关系表达式和布尔值组成。逻辑表达式由逻辑运算符、关系

27、表达式和布尔值组成。例如:例如: x=y&ab, !(ab), xy&ab|!(xa), truex=y&ab, !(ab), xy&ab|!(xa), truen n关系运算符和逻辑运算符一起使用,组成复合条件。关系运算符和逻辑运算符一起使用,组成复合条件。例例2.7 2.7 关系运算符和逻辑运算符共同使用的例子。关系运算符和逻辑运算符共同使用的例子。public class public class RelationAndConditionOpRelationAndConditionOp public static void main(String public static void m

28、ain(String kjkkjk) ) intint a=28,b=3; a=28,b=3; intint e=3; e=3; if(e!=0 & a/e5) if(e!=0 & a/e5) System.out. System.out.printlnprintln(a/e=+a/e);(a/e=+a/e); intint f=0; f=0; /* /*下面不会发生除以零溢出的错误,因为下面不会发生除以零溢出的错误,因为f!=0f!=0为为false,false,所以所以不需要对不需要对a/fa/f进行运算。进行运算。* */ / if(f!=0 & a/f5)if(f!=0 & a/f5)

29、 System.out. System.out.printlnprintln(a/f=+a/f);(a/f=+a/f); else System.out. else System.out.printlnprintln(f=+f);(f=+f); 运行结果为:运行结果为:a/e=9a/e=9f=0f=05.位运算n n位运算符用来对二进制进行操作,其操作数只能为整型或字符型。n n根据操作的类型,可分为:按位运算和移位运算n n按位运算,包括:(按取反),&(位与) ,|(位或),(位异或);n n移位运算,包括:(带符号右移),(不带符号右移)n n下面分别举例说明。按位运算n n“”-“”-

30、按位取反,对数据的每个二进制位取反按位取反,对数据的每个二进制位取反, ,属一元运属一元运算算。如:如:00001111=1111000000001111=11110000n n“&”-“&”-按位与运算。即两个操作数的相应位进行按位与运算。即两个操作数的相应位进行“ “与与” ”操作。规则:操作。规则:0&0=0 0&1=0 1&0=0 1&1=1 0&0=0 0&1=0 1&0=0 1&1=1 例如例如: : 10100001 10100001 10010110 10010110 10010110 10010110 &)01000001 &)01000001 &)11111101 &)11

31、111101 &)00000010 &)00000010 00000001 10010100 00000010 00000001 10010100 00000010 第第种用法用于对某个数中某些特定的位清零种用法用于对某个数中某些特定的位清零( (右数第二位右数第二位) ) 第第种用法用于取某个数中某些特定的位种用法用于取某个数中某些特定的位 n n“|”-“|”-按位或运算。两个操作数的相应位进行按位或运算。两个操作数的相应位进行“ “或或” ”操操作。作。 规则:规则:0|0=0 0|1=1 1|0=1 1|1=1 0|0=0 0|1=1 1|0=1 1|1=1 即只要两个即只要两个相应位

32、中有一个为相应位中有一个为1 1,则该位的结果为,则该位的结果为1 1,否则为,否则为0 0。例如。例如: :按位运算n n按位或运算按位或运算“ “|”|”可以用来将某个数中某些特定的位置可以用来将某个数中某些特定的位置1 1。 10100001 10010110 10100001 10010110 |)01000001 |)01000001 |)00001000 |)00001000 11100001 10011110 11100001 10011110n n“”“”按位异或运算按位异或运算, ,要求有两个操作数。若两个相应位相同,则要求有两个操作数。若两个相应位相同,则该位的结果为该位的

33、结果为0 0,否则结果为,否则结果为1 1, 即即 00=0 01=1 10=1 00=0 01=1 10=1 11=0 11=0 例如例如 10100001 01000001=1110000010100001 01000001=11100000n n“”“”按位异或运算通常有以下两种用法。按位异或运算通常有以下两种用法。用来使某些数中某些特定的位取反。例如用来使某些数中某些特定的位取反。例如 1001011000000010=10010100 (1001011000000010=10010100 (对右数第二位取反对右数第二位取反) )通过按位异或运算,可以实现两个数的交换,而不需要使用临时

34、通过按位异或运算,可以实现两个数的交换,而不需要使用临时变量。例如要交还两个整数变量。例如要交还两个整数a,ba,b的值,可通过以下语句实现:的值,可通过以下语句实现: a=11000001, b=01100000;a=11000001, b=01100000; a=ab; / a=ab; /此时此时a=10100001;a=10100001; b=ba; / b=ba; /此时此时b=11000001;b=11000001; a=ab; / a=ab; /此时此时a=01100000;a=01100000;5.移位运算n n“ “移位移位” ” ,就是将操作数以位为单位,一起向某个方向移动。

35、,就是将操作数以位为单位,一起向某个方向移动。n n一般用于两种情况:按一般用于两种情况:按2 2的乘方进行整数乘法或除法;对的乘方进行整数乘法或除法;对I/OI/O端口进行操作。端口进行操作。n nJavaJava定义了三种移位运算,其操作数和结果的类型都是整数。定义了三种移位运算,其操作数和结果的类型都是整数。 左移运算左移运算左移运算左移运算()():形如:形如“ “xa”,x,(,又称为算术右移又称为算术右移又称为算术右移又称为算术右移) ):形如形如“ “xa”,xa”,就是就是将将x x各个比特位右移各个比特位右移a a指定的位数,低位右移后舍弃不用,右指定的位数,低位右移后舍弃不

36、用,右移后左边留下的空格填入的是原数的符号位移后左边留下的空格填入的是原数的符号位( (正数为正数为0 0,负数,负数为为1)1)。 带符号右移带符号右移n n位相当于除以位相当于除以2 2n n。右移实现除法速度较快!右移实现除法速度较快! 不带符号右移运算不带符号右移运算不带符号右移运算不带符号右移运算(,(,又称为逻辑右移又称为逻辑右移又称为逻辑右移又称为逻辑右移) ):形如形如形如形如“ “xa”,xa”,就是将就是将x x各位右移各位右移a a位,低位右移后舍弃,右移后左边留下的位,低位右移后舍弃,右移后左边留下的空位一律填零。空位一律填零。移位运算举例x(x(十进制十进制) )x

37、x的二进制的二进制补码表示补码表示x2x2x2x2x230300001111000011110011110000111100000000111000001110000011100000111-17-171110111111101111101111001011110011111011111110110011101100111011注意注意:在Java中,使用补码来表示二进制数,最高位为符号位,正数的符号位为0,负数的符号位为1。6.三元运算n n“?:”“?:”也叫条件运算符,也叫条件运算符,JavaJava语言中仅有的一个。语言中仅有的一个。n n一般形式为:一般形式为:表达式表达式1 ? 1

38、 ? 表达式表达式2 : 2 : 表达式表达式3 3n n表达式表达式1 1的值必须是布尔型的值必须是布尔型, ,如果该值为如果该值为true,true,则对则对“ “表达式表达式2”2”进行求值,并将求值结果作为整个表进行求值,并将求值结果作为整个表达式的值;否则对表达式达式的值;否则对表达式3 3进行求值将其结果作进行求值将其结果作为整个表达式的值。为整个表达式的值。n n表达式表达式2 2和表达式和表达式3 3必须返回相同必须返回相同( (或兼容或兼容) )的数据的数据类型类型n n例如:例如:result=radio=0 ? 0 :num/radio; result=radio=0 ?

39、 0 :num/radio; n n一个条件运算符的例子。一个条件运算符的例子。例2.8 一个条件运算符的例子/*/*编程从编程从3 3个整数个整数x,y,zx,y,z中选出最大和最小者中选出最大和最小者* */ /class Max2class Max2 public static void main(String public static void main(String skjskj) ) intint x=335; x=335; intint y=212; y=212; intint z=38; z=38; intint a,b,max,min; a,b,max,min; Syste

40、m.out. System.out.printlnprintln(原来整数的值为:原来整数的值为:x=+x+,y=+y+,z=+z);x=+x+,y=+y+,z=+z); a=xy?x:y; a=xy?x:y; max=(az?a:z); max=(az?a:z); b=xy?x:y; b=xy?x:y; min=(bz?b:z); min=(bz?b:z); System.out. System.out.printlnprintln(最大的元素的值为:最大的元素的值为:+max);max); System.out. System.out.printlnprintln(最小的元素的值为:最小的

41、元素的值为:+min);min); 运行结果为原来整数的值为:原来整数的值为:X=335,Y=212,Z=38X=335,Y=212,Z=38最大的元素的值为:最大的元素的值为:335335最小的元素的值为:最小的元素的值为:38387.对象运算符instanceofn nInstanceofInstanceof是一种比较运算符,用来判断一个对象在运是一种比较运算符,用来判断一个对象在运行时是否属于某个指定类或其子类的实例,如果是则行时是否属于某个指定类或其子类的实例,如果是则返回返回true,true,否则返回否则返回falsefalse。n n其一般形式为:其一般形式为: 对象名对象名对象

42、名对象名 instanceofinstanceof 类名类名类名类名 例如:例如: public void method(Employee e)public void method(Employee e) if (e if (e instanceofinstanceof Manager) Manager) /do something as a Manager /do something as a Manager else if (e else if (e instanceofinstanceof Contractor) Contractor) /do something as a Contra

43、ctor /do something as a Contractor else else /do something else /do something else 2.3 流程控制语句n n一般来说,一般来说,JavaJava程序中的语句是顺序执行的。程序中的语句是顺序执行的。n n实际上,往往会出现一些特别的要求,比如应根据实际上,往往会出现一些特别的要求,比如应根据某个条件来决定下面进行什么操作,或需要重复地某个条件来决定下面进行什么操作,或需要重复地去做某些事情去做某些事情这就需要用到流程控制语句来控这就需要用到流程控制语句来控制程序中语句的执行顺序,以便更好的完成任务。制程序中语句的

44、执行顺序,以便更好的完成任务。几种流程控制语句几种流程控制语句几种流程控制语句几种流程控制语句语句类型语句类型关键字关键字循环循环while,do-while,forwhile,do-while,for选择选择if-else, switch-caseif-else, switch-case转向控制转向控制break,continue,label:,returnbreak,continue,label:,return异常处理异常处理try-catch-finally, throwtry-catch-finally, throw1循环结构n n循环的作用是反复执行同一块代码直到满足结束循环的作用是

45、反复执行同一块代码直到满足结束条件。现实世界的许多问题都需要用到循环控制,条件。现实世界的许多问题都需要用到循环控制,如累加求和,迭代求根,求工资总和等。如累加求和,迭代求根,求工资总和等。n nJavaJava语言中的循环语句共有三种:语言中的循环语句共有三种:whilewhile语句、语句、do-whiledo-while语句和语句和forfor语句。语句。n n在循环结构中还可以用在循环结构中还可以用continuecontinue语句和语句和breakbreak语句语句来实现循环执行过程中流程的转移。来实现循环执行过程中流程的转移。While语句n n实现实现“ “当型当型” ”循环。

46、语法形式为循环。语法形式为 while (while (布尔表达式布尔表达式布尔表达式布尔表达式) )循环体循环体循环体循环体例例2.9 2.9 用用whilewhile语句求语句求100100以内所有奇数的和。以内所有奇数的和。Public class Public class WhileDemoWhileDemo public static void main(String public static void main(String argsargs) ) intint I,sum; sum=0; / I,sum; sum=0; /计数器清零计数器清零 I=1; /II=1; /I的初值

47、为的初值为1 1 while (I=100)while (I=100) sum+=I; I+=2; sum+=I; I+=2; System.out. System.out.printlnprintln(sum);(sum); Do-while语句n n实现实现“ “直到型直到型” ”循环。语法形式为循环。语法形式为 dodo 循环体循环体循环体循环体 while (while (布尔表达式布尔表达式布尔表达式布尔表达式) )例例2.10 2.10 用用do-whiledo-while语句求语句求100100以内所有奇数的和以内所有奇数的和。Public class Public class

48、DoWhileDemoDoWhileDemo public static void main(String public static void main(String argsargs) ) intint I,sum; sum=0; / I,sum; sum=0; /计数器清零计数器清零 I=1; /II=1; /I的初值为的初值为1 1 do do sum+=I; I+=2; sum+=I; I+=2; while (I=100) while (I=100) System.out. System.out.printlnprintln(sum);(sum); do-while语句 while

49、的不同n nDo-while语句总是先进入循环,然后监测条件,在决定是否继续循环;而while语句实现测试条件,在决定是否进入循环。用do-while语句时,循环体至少执行一次。n n看下面两个特殊例子。例2.11 WhileDemo2.javapublic class WhileDemo2public class WhileDemo2 public static void main(String public static void main(String dfddfd) ) intint i=88; i=88; while(i88) while(i88) System.out. Syste

50、m.out.printlnprintln(Print+i);(Print+i); i+; i+; 结果没有任何输出结果没有任何输出例2.12 DoWhileDemo2.javapublic class DoWhileDemo2public class DoWhileDemo2 public static void main(String public static void main(String dfddfd) ) intint i=88; i=88; do do System.out. System.out.printlnprintln(Print +i);(Print +i); i+;

51、i+; while(i88); while(i88); 运行结果运行结果Print 88Print 88for语句n n也用来实现也用来实现“ “当型当型” ”循环。语法形式为循环。语法形式为 forfor ( (表达式表达式表达式表达式1;1;表达式表达式表达式表达式2;2;表达式表达式表达式表达式3) 3) 循环体循环体循环体循环体如:如:如:如:for(for(intint num=0;num1000;num+) num=0;num1000;num+) / / 一段代码一段代码一段代码一段代码 例例2.13 2.13 用用forfor语句求语句求100100以内所有奇数的和。以内所有奇数

52、的和。public class public class WhileDemoWhileDemo public static void main(String public static void main(String argsargs) ) intint sum=0; / sum=0; /计数器清零计数器清零 for(for(intint i=1; i=100; i+=2) i=1; i=100; i+=2) sum+=i; sum+=i; /end for/end for System.out. System.out.printlnprintln(sum); (sum); /end mai

53、n/end main Num成为循环控制变量,用于决定循环开始和结束for语句n nForFor语句的结构比语句的结构比whilewhile语句和语句和do-whiledo-while语句更加简洁而语句更加简洁而精炼,因而在程序设计中应用广泛。精炼,因而在程序设计中应用广泛。n n表达式表达式1 1和表达式和表达式3 3的位置上可以包含多个语句。的位置上可以包含多个语句。JavaJava提提供了一种表达多个语句的方法供了一种表达多个语句的方法逗号语句逗号语句逗号语句逗号语句, ,逗号语句逗号语句使用逗号使用逗号(,)(,)分隔的语句系列。如:分隔的语句系列。如: for(i=0,j=10;ij

54、;i+,j-)for(i=0,j=10;ij;i+,j-) n n表达式表达式1 1、表达式、表达式2 2及表达式及表达式3 3都可以为空语句都可以为空语句( (分号不能分号不能省略省略), ),三者均为空的时候,相当于一个无限循环三者均为空的时候,相当于一个无限循环n n注意,注意,forfor循环的圆括号后面不要加分号。请看下例循环的圆括号后面不要加分号。请看下例例2.14 用for语句求1+2+3+999的和Public class ForDemo2Public class ForDemo2 public static void main(String public static voi

55、d main(String argsargs) intint sum=0; sum=0; intint i; i; for(i=1;i1000;i+); / for(i=1;i1000;i+); / sum+=i; sum+=i; System.out. System.out.printlnprintln(“i=”+i);(“i=”+i); System.out.System.out.printlnprintln(“sum=”+sum);(“sum=”+sum); 运行结果如下:运行结果如下:i=1000 sum=1000i=1000 sum=1000循环的嵌套n n一个循环体内又包含另一个完

56、整的循环结构,称为循环的一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。嵌套。WhileWhile循环循环, ,do-whiledo-while循环和循环和forfor循环都可以相互嵌套。循环都可以相互嵌套。例例2.15 2.15 编程输出一个编程输出一个0909的乘法表的乘法表public class public class MultiTableMultiTable public static void main(String public static void main(String dasddasd) ) intint b,a; b,a; for(b=0;b=9;b+) fo

57、r(b=0;b=9;b+) for(a=0;a=b;a+) for(a=0;a=b;a+) System.out.print(a+*+b+=+a*b+”t); System.out.print(a+*+b+=+a*b+”t); System.out. System.out.printlnprintln(); (); 0*0=00*0=00*1=0 1*1=10*1=0 1*1=10*2=0 1*2=2 2*2=40*2=0 1*2=2 2*2=40*3=0 1*3=3 2*3=6 3*3=90*3=0 1*3=3 2*3=6 3*3=90*4=0 1*4=4 2*4=8 3*4=12 4*4=

58、160*4=0 1*4=4 2*4=8 3*4=12 4*4=160*5=0 1*5=5 2*5=10 3*5=15 4*5=20 5*5=250*5=0 1*5=5 2*5=10 3*5=15 4*5=20 5*5=250*6=0 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=360*6=0 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=360*7=0 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=490*7=0 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=

59、42 7*7=490*8=0 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=640*8=0 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=640*9=0 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=810*9=0 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81循环结构中的continue语句n nContinueContinue语句

60、只能在循环结构中使用。一般语语句只能在循环结构中使用。一般语法格式为:法格式为:continue continue 标号;标号;标号;标号; 标号可选。标号可选。标号可选。标号可选。n nContinueContinue有以下两种使用情况。有以下两种使用情况。(1)(1)不带标号不带标号此时,此时, continuecontinue语句用来结束语句用来结束本次循环,即跳过循环体中本次循环,即跳过循环体中continuecontinue语句后面语句后面尚未执行的语句,转去进行循环条件的判断,尚未执行的语句,转去进行循环条件的判断,以决定是否继续循环。以决定是否继续循环。(2)(2)带标号带标号此

61、时,此时, continuecontinue语句跳过标号所语句跳过标号所指语句块中所有余下部分的语句,回到标号所指语句块中所有余下部分的语句,回到标号所指语句块的条件测试部分进行条件判断,以决指语句块的条件测试部分进行条件判断,以决定循环是否继续执行。定循环是否继续执行。循环结构中的continue语句n n标号的书写形式如下:标号的书写形式如下: 标号:程序块标号:程序块标号:程序块标号:程序块n n标号是一个合法的标号是一个合法的JavaJava标识符。一般来说,标标识符。一般来说,标号应定义在程序中外层循环语句的前面,用来号应定义在程序中外层循环语句的前面,用来标志该循环结构。标志该循环

62、结构。n n例例2.16 2.16 找出找出2121世纪的所有闰年,并将结果以每世纪的所有闰年,并将结果以每行行1010个年份的形式输出。闰年的条件应与下面个年份的形式输出。闰年的条件应与下面二者之一相符合:二者之一相符合: 能被能被4 4整除,但不能被整除,但不能被100100整除;整除; 能被能被4 4整除,又能被整除,又能被400400整除;整除;例2.16 不带标号的continue语句的例子class class EndInnerLoopEndInnerLoop public static void main(String public static void main(String

63、 kdjkdj) ) System.out.println(21 System.out.println(21世纪的闰年有:世纪的闰年有:);); intint n=0; / n=0; /计数计数 for(for(intint year=2000;year3000;year+=4) year=2000;year3000;year+=4) if(year%100=0 & year%400!=0) if(year%100=0 & year%400!=0) continue; continue; System.out.print(year+t); System.out.print(year+t); n

64、+; n+; if(n10) continue; if(n10) continue; System.out. System.out.printlnprintln();(); n=0; n=0; /end for/end for /end main/end main /end class/end class例2.17 带标号的continue语句的例子:打印一个三角形的09的乘法表。class class ContinueLabelContinueLabel public static void main(String public static void main(String dasddas

65、d) ) outer: outer: for( for(intint i=0;i10;i+) i=0;i10;i+) for( for(intint j=0;j10;j+) j=0;ji) if(ji) System.out. System.out.printlnprintln( );( ); continue outer; continue outer; System.out.print( +i+*+j+=+(i*j); System.out.print( +i+*+j+=+(i*j); /end for j/end for j /end for i/end for i /end main/

66、end main /end class/end classbreak语句n n当循环测试条件为True时,如果希望循环立即中止,可使用break语句。n nBreak语句与continue语句一样,对循环的执行起限定转向的作用。n n范围:continue语句只能在循环中使用,而break语句还可以用在switch语句中。n n区别:continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环语句的执行。Break语句n nBreak语句的一般语法格式为: break 标号;标号; 其中,标号部分可选n nBreak语句通常有以下两种情况。(1) 不带标号不带

67、标号此时的功能是终止所在的循环,转去执行其后的第一条语句。执行时的特点:一是在多重循环时,只能使循环从本层的循环中跳出来;二是此时程序一定转移到本层循环的下一个语句。(2) 带标号带标号此时语句的功能是终止有标号指出的语句块的执行,并从紧跟该块的第一条语句处开始往下执行。例2.18 不带标号的break语句的例子:编程找出大于1000的第三个素数。public class public class BreakDemoBreakDemo public static void main(String public static void main(String argsargs) ) intint

68、 n=0; n=0; intint b=999; b=999; outer: outer: do b+=2; do b+=2; intint m=( m=(intint)(Math.ceil(Math.)(Math.ceil(Math.sqrtsqrt(b);(b); / /取得大于或者等于要判断的数的平方根的最小整数值取得大于或者等于要判断的数的平方根的最小整数值 for(for(intint i=2;i=m;i+) i=2;i=m;i+) if(b%i=0) continue outer; if(b%i=0) continue outer; n+; n+; if(n=3) break; i

69、f(n=3) break; while(true); while(true); System.out. System.out.printlnprintln(大于大于10001000的第三个素数为:的第三个素数为:+b);b); 例2.19 带标号的break语句的例子。public class public class BreakDemoBreakDemo public static void main(String public static void main(String argsargs) ) intint sum=0; sum=0; coloopcoloop: /: /定义标号定义标

70、号 while (sum=100) while (sum=100) for( for(intint count=1;count=10;count+) count=1;count60) if(sum60) break break coloopcoloop; ; /while/while System.out. System.out.printlnprintln(“sum=+sum);(“sum=+sum); 程序执行结果为:程序执行结果为:Sum=66Sum=662.选择语句n n选择语句提供了一种控制机制,使得程序根据相应的条件去执行对应的语句。n nJava中的选择语句有两种:一种是实现两路

71、分支选择的if-else语句,另一种是实现多路分支选择的switch语句。If-else语句 if (if (布尔表达式布尔表达式) ) 语句语句1 1 elseelse 语句语句2 2 布尔表达式用来判断选择程序的流程走向,而用布尔表达式用来判断选择程序的流程走向,而用“ “ ” ”括起来的括起来的elseelse部分是可选的。部分是可选的。(1) 简单形式布尔表达式布尔表达式语句语句1 1后续语句后续语句truetruefalsefalse无无elseelse部分的部分的if if语句流程图语句流程图布尔表达式布尔表达式语句语句1 1后续语句后续语句truetruefalsefalse有有

72、elseelse部分的部分的if if语句流程图语句流程图语句语句2 2nelseelse语句不能作为语句单独使用,它必须是语句不能作为语句单独使用,它必须是if if语句语句的一部分,与的一部分,与if if 配对使用。配对使用。n下面通过两个例子说明下面通过两个例子说明if-elseif-else语句的用法。语句的用法。例例2.20 2.20 没有没有elseelse部分的部分的if if语句的例子:求一个数的绝对语句的例子:求一个数的绝对值,该数由命令行参数给出。值,该数由命令行参数给出。public class public class IfExampleIfExample publi

73、c static void main(String public static void main(String argsargs) ) System.out.System.out.printlnprintln(“(“请输入一个要求其绝对值的数:请输入一个要求其绝对值的数:);); if(if(argsargs.length!=1).length!=1) System.err.System.err.printlnprintln(“(“请重新执行,一定要输入一个数!请重新执行,一定要输入一个数!);); System.exit(-1);System.exit(-1); double number

74、=Double.valueOf(args0.doubleValue(); double number=Double.valueOf(args0.doubleValue(); /*/*将命令行参数传来的字符串转换为浮点数赋值给将命令行参数传来的字符串转换为浮点数赋值给doubledouble型型变量变量number */number */ System.out.print(“ System.out.print(“你输入的数是:你输入的数是:+number);number); if(number=0) number=-number; if(number=60)if(number=60) Syste

75、m.out. System.out.printlnprintln(“(“祝贺你,你及格了!祝贺你,你及格了!);); elseelse System.out.print(“ System.out.print(“真遗憾,你没及格,请继续努力!真遗憾,你没及格,请继续努力!);); If-else语句 if (if (布尔表达式布尔表达式1) 1) 语句语句1 1 else if (else if (布尔表达式布尔表达式2) 2) 语句语句2 2 else if (else if (布尔表达式布尔表达式m) m) 语句语句m m else else 语句语句n n 程序从上往下依次判断布尔表达式的

76、条件,一程序从上往下依次判断布尔表达式的条件,一旦某个条件满足,就执行相关语句,然后就不再判旦某个条件满足,就执行相关语句,然后就不再判断其它条件,直接转到断其它条件,直接转到if if语句的后续语句去执行。语句的后续语句去执行。(1) 复杂形式if语句的嵌套If与else的配对 if(x0)if(x0) if(y0) if(y0) z=100; z=100; else z=99; else z=99; 此处的此处的elseelse与与if(y0)if(y0)相配。即当相配。即当x0x0且且y=0y0)if(x0) if(y0) z=100; if(y0) z=100; / /此处多了一对花括

77、号此处多了一对花括号 else z=99;else z=99; 此时,此时,elseelse与与if(x0)if(x0)相配。也就是说,当相配。也就是说,当x=0x=0时,时,z z的值为的值为9999( (与与y y的值没关系的值没关系) )。注意,注意,elseelse总是与离它最近的总是与离它最近的if if配对。如果需要,配对。如果需要,可以通过可以通过“ “ ” ”来改变配对关系。来改变配对关系。例例2.22 2.22 用用If-elseIf-else语句多重嵌套实现判断某月份属于哪语句多重嵌套实现判断某月份属于哪个季节,月份由命令行参数给出。个季节,月份由命令行参数给出。class

78、 IfSeasonclass IfSeason public static void main(String args) public static void main(String args) System.out.println( System.out.println(请输入一个有效月份:请输入一个有效月份:);); if (args.length!=1) if (args.length!=1) System.err.println( System.err.println(请重新执行,一定要输入一个整数请重新执行,一定要输入一个整数!);!); System.exit(-1); Syste

79、m.exit(-1); int month=Integer.parseInt(args0); int month=Integer.parseInt(args0); System.out.println( System.out.println(你输入的月份是:你输入的月份是:+month);+month); String season; String season; if(month=12|month=1|month=2) if(month=12|month=1|month=2) season=season=冬季冬季; ; else if(month=3|month=4|month=5) sea

80、son= else if(month=3|month=4|month=5) season=春季春季; ; else if(month=6|month=7|month=8) season= else if(month=6|month=7|month=8) season=夏季夏季; ; else if(month=9|month=10|month=11) season= else if(month=9|month=10|month=11) season=秋季秋季; ; else season= else season=无效的月份无效的月份! ! 请重新执行。请重新执行。; ; System.out

81、.println( System.out.println(所处季节为:所处季节为:+season);+season); switch语句 if if语句的嵌套形式能够实现多路分支,满足程序语句的嵌套形式能够实现多路分支,满足程序流程控制的要求,但是不够灵活,书写麻烦,可读流程控制的要求,但是不够灵活,书写麻烦,可读性也不大好。性也不大好。 在在JavaJava中,为多路选择流程控制专门提供了一个中,为多路选择流程控制专门提供了一个语句语句switchswitch语句,其语法形式如下:语句,其语法形式如下:Switch (Switch (表达式表达式) ) case case 常量常量1 1:

82、语句语句1 1 break;break; case case 常量常量2 2: 语句语句2 2 break;break; case case 常量常量n n: 语句语句n break;n break; default: default: 默认处理语句默认处理语句 break;break; switch语句(1) (1) 用作判断的表达式必须是符合用作判断的表达式必须是符合byte,char,short,byte,char,short,intint类型类型的表达式,不能是的表达式,不能是float,longfloat,long或或string;string;(2) switch(2) switc

83、h语句将表达式的值依次与每个语句将表达式的值依次与每个casecase子句中的常量子句中的常量值相比较。如果匹配成功,则执行该值相比较。如果匹配成功,则执行该casecase子句中的语句,子句中的语句,直到遇到直到遇到breakbreak语句为止;语句为止;(3) (3) casecase子句中的类型必须与表达式的类型相容,而且每子句中的类型必须与表达式的类型相容,而且每个个casecase子句中常量的值必须是不同的;子句中常量的值必须是不同的;(4) (4) defaultdefault子句是可选的,当表达式的值与任意子句是可选的,当表达式的值与任意casecase子句子句中的值都不匹配时,

84、就执行中的值都不匹配时,就执行defaultdefault后的语句;后的语句;(5) (5) breakbreak语句用来在执行完一个语句用来在执行完一个casecase分支后,使程序跳出分支后,使程序跳出switchswitch语句,执行语句,执行switchswitch语句的后续语句。一般在每个语句的后续语句。一般在每个casecase分支后,要用分支后,要用breakbreak来中止后面的来中止后面的casecase分支语句。分支语句。使用switch语句注意事项:switch语句(6) (6) 在一些特殊情况下,如多个不同的在一些特殊情况下,如多个不同的casecase值要执行一组值要

85、执行一组相同的操作,可写成下面的形式:相同的操作,可写成下面的形式: case case 常量常量 n: n: case case 常量常量 n+1:n+1: 语句语句 break;break; (7) case(7) case分支中包括多个执行语句时,可以不用花括号分支中包括多个执行语句时,可以不用花括号“ “ ”括起;括起;(8) (8) 通过通过if-elseif-else语句可以实现语句可以实现switchswitch语句所有功能。但通常语句所有功能。但通常使用使用switchswitch语句更简练,且可读性强,程序执行效率高。语句更简练,且可读性强,程序执行效率高。使用switch语

86、句注意事项:例例2.22 2.22 用用switchswitch语句实现判断某月份属于哪个季节,语句实现判断某月份属于哪个季节,月份由命令行参数给出。月份由命令行参数给出。class SwitchSeasonclass SwitchSeason public static void main(String args) public static void main(String args) System.out.println( System.out.println(请输入一个有效月份:请输入一个有效月份:);); if (args.length!=1) if (args.length!=1)

87、 System.err.println( System.err.println(请重新执行,一定要输入一个整数请重新执行,一定要输入一个整数!);!); System.exit(-1); System.exit(-1); int month=Integer.parseInt(args0); int month=Integer.parseInt(args0); System.out.println( System.out.println(你输入的月份是:你输入的月份是:+month);+month); String season; String season; switch(month) swi

88、tch(month) case 12: case 12: case 1: case 1: case 2: case 2: season= season=冬季冬季; break; break;/续下页续下页/接上页接上页 case 3:case 3: case 4: case 4: case 5: case 5: season= season=春季春季; break; break; case 6: case 6: case 7: case 7: case 8: case 8: season= season=夏季夏季; break; break; case 9: case 9: case 10:

89、case 10: case 11: case 11: season= season=秋季秋季; break; break; default: default: season= season=无效的月份无效的月份! ! 请重新执行。请重新执行。; ; System.out.println( System.out.println(所处季节为:所处季节为:+season);+season); 2.4 算法设计举例n n穷举也称为枚举,其基本思想是一一列举可能进行的测试,从中找出符合条件的解。通过计算机实现高速运算,借助重复结构实现穷举。n n在设计穷举算法时,在保证思路严密,清晰,有条理,不漏解的情

90、况下,应尽量减小穷举规模。n n下面举例说明。1 穷举2.4 算法设计举例穷举public class Test_keypublic class Test_key public static void main(String public static void main(String argsargs) ) intint x,y,z; x,y,z; intint max=(int)(Math.floor(Math.sqrt(300); max=(int)(Math.floor(Math.sqrt(300); / /求出不大于求出不大于300300的平方根的最小整数的平方根的最小整数 for(

91、x=1;x=max;x+) for(x=1;x=max;x+) for(y=1;y=max;y+) for(y=1;y=max;y+) if(y=x) continue; if(y=x) continue; for(z=1;z=max;z+) for(z=1;z=max;z+) if (z*z=x*x+y*y) if (z*z=x*x+y*y) System.out. System.out.printlnprintln(x+t+y+t+z);(x+t+y+t+z); /*end for z*/*end for z*/ /*end for y */*end for y */ /*end for

92、x*/*end for x*/ /* end main */* end main */ 例例2.24 2.24 写一程序,输出所有写一程序,输出所有1 1到到300300间的满足间的满足x2+y2=z2x2+y2=z2的整数的整数x,y,zx,y,z的组合的组合( (要求要求x,y,zx,y,z各不相等各不相等) )。2.4 算法设计举例n n迭代就是不断由已知值推出新值,直到求得解为止。迭代就是不断由已知值推出新值,直到求得解为止。n n迭代一般有三个环节组成:迭代一般有三个环节组成: 迭代初始值;迭代初始值; 迭代公式;迭代公式; 迭代终止条件。迭代终止条件。n n例例2.25 2.25

93、通过命令行参数接受两个正整数通过命令行参数接受两个正整数mm和和n n,用辗用辗转相除法算出它们的最大公约数。其基本思想是:假转相除法算出它们的最大公约数。其基本思想是:假设设u u表示被除数,表示被除数,v v表示除数表示除数, ,r r表示余数,辗转相除法表示余数,辗转相除法可表述为:可表述为: u=m; v=n; u=m; v=n; 当当r=u%vr=u%v不为不为0 0时时 u=v; u=v; v=r; v=r; 直到直到r=u%vr=u%v等于等于0 0,此时的,此时的v v即为即为mm和和n n的最大公的最大公约数。约数。2 迭代迭代的例子求最大公约数class class Gre

94、atestCommonDivisorGreatestCommonDivisor public static void main(String public static void main(String argsargs) /) /主方法主方法 if(if(argsargs.length2).length1(n-1)!*n ,n1调用调用rfact(5)rfact(5)输出输出Rfact(5)=120Rfact(5)=120mainmain方法方法求求5*5*rfact(4)rfact(4)返回值返回值120120rfact(5)rfact(5)求求4*4*rfact(3)rfact(3)返回

95、值返回值2424rfact(4)rfact(4)求求3*3*rfact(2)rfact(2)返回值返回值6 6rfact(3)rfact(3)求求2*2*rfact(1)rfact(1)返回值返回值2 2rfact(2)rfact(2). . . .返回返回1 1rfact(1)rfact(1)下图为用方法下图为用方法rfactrfact( )( )进行进行递归计算的过程示意图递归计算的过程示意图2.4 算法设计举例设计递归程序时一般分两个步骤:一是求得范围缩设计递归程序时一般分两个步骤:一是求得范围缩小的同性质问题的结果;二是利用这个已得的结果小的同性质问题的结果;二是利用这个已得的结果和一

96、个简单的操作来求得问题的最后解答。和一个简单的操作来求得问题的最后解答。递归方法的主要内容包括定义递归头和定义如何从递归方法的主要内容包括定义递归头和定义如何从同性质的简化问题求得当前问题两个部分。同性质的简化问题求得当前问题两个部分。例例2.26 2.26 利用公式利用公式e=1+1/1!+1/2!+1/3!+1/n!e=1+1/1!+1/2!+1/3!+1/n!计算数计算数学常量学常量e e,要求要求1/1/n!0.0000001n!=0.0000001) e=e+x; if(x=0.0000001) e=e+x; System.out. System.out.printlnprintln(i=+i+ e=+e);(i=+i+ e=+e); i+; i+; else break; else break; while(true); while(true); System.out. System.out.printlnprintln(This is result: e=+e);(This is result: e=+e); 作业n n教材P58-60第二章习题n n1,5 课堂练习n n2,3,4 自测题n n6,7,8,9 上机实习题(提示思路)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号