《方法设计》PPT课件_第1页
《方法设计》PPT课件_第2页
《方法设计》PPT课件_第3页
《方法设计》PPT课件_第4页
《方法设计》PPT课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第二章方法设计,2.1方法使用基础2.2运算符与表达式2.3流程控制语句2.4算法设计举例,2.1方法使用基础,1.方法的定义2.方法调用与参数传递,1.方法的定义,方法首部的声明方法修饰符方法返回值类型方法名(形式参数表)方法体是一个语句序列,具体描述方法的返回值、方法的参数和方法在类的成员变量之间的关系,以实现方法的功能。方法的返回值是方法向调用值返回的数据。若返回值类型不是void,方法体中必须用return语句来返回一个方法声明时指定类型的值。return表达式;,两个方法声明的例子,(1)方法setCNumbervoidsetCNumber(intxNumber)/方法首部声明/方法体开始cNumber=xNumber;/方法体中的语句,描述方法的功能/方法体结束(2)方法getCNumberintgetCNumber()/方法首部声明/方法体开始returncNumber;/将cNumber的值作为getCNumber/方法的返回值/方法体结束,2.方法的调用与参数传递,调用对象成员方法的语法形式为对象名.成员方法名(实际参数表)调用对象成员方法的语义是:计算实际参数表中各表达式的值,并将它们一一传递给被调用方法中对应的形式参数,执行被调用方法的方法体。方法调用的结果就是被调用方法的执行结果。,例2.1一个实现两个float型数相加的方法,classMethodDemo1floatadd(floatx,floaty)/建议所取的方法名有助于说明方法的功能,以便阅读程序和记忆floatz;/z是方法体的局部变量,作用域是add整个方法的方法体z=x+y;returnz;classTryMethodDemo1/主类publicstaticvoidmain(Stringargs)MethodDemo1a=newMethodDemo1();System.out.println(a.add(5,8);运行结果为13.0,例2.2用对象作为参数传递值的数据相加方法。,classObjPara/定义对象作为参数的类,为便于举例,本方法只有一个成员变量floattemp;classMethodDemo2voidadd(floatx,floaty,ObjParaz)/方法首部声明,此方法没有返回值z.temp=x+y;/将x+y的结果存入类变量z的成员变量temp中。classTryMethodDemo2/主类publicstaticvoidmain(Stringabc)ObjParab=newObjPara();MethodDemo2a=newMethodDemo2();a.add(4,6,b);System.out.println(b.temp);运行结果为10.0,例2.3方法之间的消息发送与参数传递。,classMethodDemo3floatadd(floatx,floaty)floatz;z=x+y;returnz;voidcallAdd(floatm,floatn)floatt;t=add(m,n);/*向方法add发送消息,将参数m,n的值分别传递给x,y,然后执行方法add的方法体,计算x+y,计算结果作为add的返回值传回给t*/System.out.print(m+n+=+t);classTryMethodDemo3/主类publicstaticvoidmain(Stringrgb)MethodDemo3a=newMethodDemo3();a.callAdd(4,6);运行结果为4.0+6.0=10.0,可以不引入变量t,而将本句话改为System.out.print(m+n+=+add(m,n);,例2.4对象作为参数值进行消息发送与参数传递,classObjParafloattemp;classMethodDemo4voidadd(floatx,floaty,ObjParaz)z.temp=x+y;voidcallAdd(floatm,floatn)ObjParak=newObjPara();add(m,n,k);System.out.print(m+n+=+k.temp);/k.temp的值即为m+nclassTryMethodDemo4/主类publicstaticvoidmain(Stringjsj)MethodDemo4a=newMethodDemo4();a.callAdd(4,6);运行结果为4.0+6.0=10.0,2.2运算符与表达式,运算对数据进行的操作运算符表示各种不同运算的符号操作数(operand)参与运算的数据表达式(Expression)由操作数和运算符按一定的语法形式组成的有意义的符号序列。最简单的表达式只有一个最终变量或变量名。常用的运算有:赋值运算,算术运算,关系运算,逻辑运算,位运算,三元运算,对象运算。下面分别进行介绍。,Java语言的运算符(按优先级降序排列),一元运算+-+-!()右结合算术运算*/%+-移位运算比较运算=instanceof=!=按位运算intc=+a/b;intc2=a-/b;intc3=a*2%b;doubled=2.5;doubled2=d%3;System.out.println(c=+c);System.out.println(c2=+c2);System.out.println(c3=+c3);System.out.println(d2=+d2);,运行结果为:c=2c2=2c3=1d2=2.5,3.关系运算,关系运算又称为比较运算,它的运算结果是一个布尔型值。比较的结果为真(true)或假(false).关系运算都是二元运算:,=,5,a=2;“=”和“=”的区分关系运算举例,例2.6关系运算举例:RelationOp.java,publicclassRelationOppublicstaticvoidmain(Stringapp)inta=25,b=3;booleand=ab;booleand1=3.5=a*2-b*9;System.out.println(d=+d);System.out.println(d1=+d1);System.out.println(d2=+d2);System.out.println(d3=+d3);System.out.println(e=+e);,运行结果:d=trued1=falsed2=trued3=truee=true,4.逻辑运算,逻辑运算可以将几个关系表达式或者布尔值连接起来,表示一个较复杂的条件。逻辑运算符:!(逻辑非)!op1一元inte=3;if(e!=0运行结果为:a/e=9f=0,5.位运算,位运算符用来对二进制进行操作,其操作数只能为整型或字符型。根据操作的类型,可分为:按位运算和移位运算按位运算,包括:(按取反),a=ab;/此时a=10100001;b=ba;/此时b=11000001;a=ab;/此时a=01100000;,5.移位运算,“移位”,就是将操作数以位为单位,一起向某个方向移动。一般用于两种情况:按2的乘方进行整数乘法或除法;对I/O端口进行操作。Java定义了三种移位运算,其操作数和结果的类型都是整数。左移运算(,又称为算术右移):形如“xa”,就是将x各个比特位右移a指定的位数,低位右移后舍弃不用,右移后左边留下的空格填入的是原数的符号位(正数为0,负数为1)。带符号右移n位相当于除以2n。右移实现除法速度较快!不带符号右移运算(,又称为逻辑右移):形如“xa”,就是将x各位右移a位,低位右移后舍弃,右移后左边留下的空位一律填零。,移位运算举例,注意:在Java中,使用补码来表示二进制数,最高位为符号位,正数的符号位为0,负数的符号位为1。,6.三元运算,“?:”也叫条件运算符,Java语言中仅有的一个。一般形式为:表达式1?表达式2:表达式3表达式1的值必须是布尔型,如果该值为true,则对“表达式2”进行求值,并将求值结果作为整个表达式的值;否则对表达式3进行求值将其结果作为整个表达式的值。表达式2和表达式3必须返回相同(或兼容)的数据类型例如:result=radio=0?0:num/radio;一个条件运算符的例子。,例2.8一个条件运算符的例子,/*编程从3个整数x,y,z中选出最大和最小者*/classMax2publicstaticvoidmain(Stringskj)intx=335;inty=212;intz=38;inta,b,max,min;System.out.println(原来整数的值为:x=+x+,y=+y+,z=+z);a=xy?x:y;max=(az?a:z);b=xy?x:y;min=(bz?b:z);System.out.println(最大的元素的值为:+max);System.out.println(最小的元素的值为:+min);,运行结果为原来整数的值为:X=335,Y=212,Z=38最大的元素的值为:335最小的元素的值为:38,7.对象运算符instanceof,Instanceof是一种比较运算符,用来判断一个对象在运行时是否属于某个指定类或其子类的实例,如果是则返回true,否则返回false。其一般形式为:对象名instanceof类名例如:publicvoidmethod(Employeee)if(einstanceofManager)/dosomethingasaManagerelseif(einstanceofContractor)/dosomethingasaContractorelse/dosomethingelse,2.3流程控制语句,一般来说,Java程序中的语句是顺序执行的。实际上,往往会出现一些特别的要求,比如应根据某个条件来决定下面进行什么操作,或需要重复地去做某些事情这就需要用到流程控制语句来控制程序中语句的执行顺序,以便更好的完成任务。几种流程控制语句,1循环结构,循环的作用是反复执行同一块代码直到满足结束条件。现实世界的许多问题都需要用到循环控制,如累加求和,迭代求根,求工资总和等。Java语言中的循环语句共有三种:while语句、do-while语句和for语句。在循环结构中还可以用continue语句和break语句来实现循环执行过程中流程的转移。,While语句,实现“当型”循环。语法形式为while(布尔表达式)循环体,例2.9用while语句求100以内所有奇数的和。PublicclassWhileDemopublicstaticvoidmain(Stringargs)intI,sum;sum=0;/计数器清零I=1;/I的初值为1while(I=100)sum+=I;I+=2;System.out.println(sum);,Do-while语句,实现“直到型”循环。语法形式为do循环体while(布尔表达式),例2.10用do-while语句求100以内所有奇数的和。PublicclassDoWhileDemopublicstaticvoidmain(Stringargs)intI,sum;sum=0;/计数器清零I=1;/I的初值为1dosum+=I;I+=2;while(I=100)System.out.println(sum);,do-while语句while的不同,Do-while语句总是先进入循环,然后监测条件,在决定是否继续循环;而while语句实现测试条件,在决定是否进入循环。用do-while语句时,循环体至少执行一次。看下面两个特殊例子。,例2.11WhileDemo2.java,publicclassWhileDemo2publicstaticvoidmain(Stringdfd)inti=88;while(i88)System.out.println(Print+i);i+;结果没有任何输出,例2.12DoWhileDemo2.java,publicclassDoWhileDemo2publicstaticvoidmain(Stringdfd)inti=88;doSystem.out.println(Print+i);i+;while(i88);运行结果Print88,for语句,也用来实现“当型”循环。语法形式为for(表达式1;表达式2;表达式3)循环体如:for(intnum=0;num1000;num+)/一段代码,例2.13用for语句求100以内所有奇数的和。publicclassWhileDemopublicstaticvoidmain(Stringargs)intsum=0;/计数器清零for(inti=1;i=100;i+=2)sum+=i;/endforSystem.out.println(sum);/endmain,Num成为循环控制变量,用于决定循环开始和结束,for语句,For语句的结构比while语句和do-while语句更加简洁而精炼,因而在程序设计中应用广泛。表达式1和表达式3的位置上可以包含多个语句。Java提供了一种表达多个语句的方法逗号语句,逗号语句使用逗号(,)分隔的语句系列。如:for(i=0,j=10;ij;i+,j-)表达式1、表达式2及表达式3都可以为空语句(分号不能省略),三者均为空的时候,相当于一个无限循环注意,for循环的圆括号后面不要加分号。请看下例,例2.14用for语句求1+2+3+999的和,PublicclassForDemo2publicstaticvoidmain(Stringargs)intsum=0;inti;for(i=1;i1000;i+);/sum+=i;System.out.println(“i=”+i);System.out.println(“sum=”+sum);运行结果如下:i=1000sum=1000,循环的嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。While循环,do-while循环和for循环都可以相互嵌套。,例2.15编程输出一个09的乘法表publicclassMultiTablepublicstaticvoidmain(Stringdasd)intb,a;for(b=0;b=9;b+)for(a=0;a=b;a+)System.out.print(a+*+b+=+a*b+”t);System.out.println();,0*0=00*1=01*1=10*2=01*2=22*2=40*3=01*3=32*3=63*3=90*4=01*4=42*4=83*4=124*4=160*5=01*5=52*5=103*5=154*5=205*5=250*6=01*6=62*6=123*6=184*6=245*6=306*6=360*7=01*7=72*7=143*7=214*7=285*7=356*7=427*7=490*8=01*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=640*9=01*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81,循环结构中的continue语句,Continue语句只能在循环结构中使用。一般语法格式为:continue标号;标号可选。Continue有以下两种使用情况。(1)不带标号此时,continue语句用来结束本次循环,即跳过循环体中continue语句后面尚未执行的语句,转去进行循环条件的判断,以决定是否继续循环。(2)带标号此时,continue语句跳过标号所指语句块中所有余下部分的语句,回到标号所指语句块的条件测试部分进行条件判断,以决定循环是否继续执行。,循环结构中的continue语句,标号的书写形式如下:标号:程序块标号是一个合法的Java标识符。一般来说,标号应定义在程序中外层循环语句的前面,用来标志该循环结构。例2.16找出21世纪的所有闰年,并将结果以每行10个年份的形式输出。闰年的条件应与下面二者之一相符合:能被4整除,但不能被100整除;能被4整除,又能被400整除;,例2.16不带标号的continue语句的例子,classEndInnerLooppublicstaticvoidmain(Stringkdj)System.out.println(21世纪的闰年有:);intn=0;/计数for(intyear=2000;year3000;year+=4)if(year%100=0/endfor/endmain/endclass,例2.17带标号的continue语句的例子:打印一个三角形的09的乘法表。,classContinueLabelpublicstaticvoidmain(Stringdasd)outer:for(inti=0;ii)System.out.println();continueouter;System.out.print(+i+*+j+=+(i*j);/endforj/endfori/endmain/endclass,break语句,当循环测试条件为True时,如果希望循环立即中止,可使用break语句。Break语句与continue语句一样,对循环的执行起限定转向的作用。范围:continue语句只能在循环中使用,而break语句还可以用在switch语句中。区别:continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环语句的执行。,Break语句,Break语句的一般语法格式为:break标号;其中,标号部分可选Break语句通常有以下两种情况。(1)不带标号此时的功能是终止所在的循环,转去执行其后的第一条语句。执行时的特点:一是在多重循环时,只能使循环从本层的循环中跳出来;二是此时程序一定转移到本层循环的下一个语句。(2)带标号此时语句的功能是终止有标号指出的语句块的执行,并从紧跟该块的第一条语句处开始往下执行。,例2.18不带标号的break语句的例子:编程找出大于1000的第三个素数。,publicclassBreakDemopublicstaticvoidmain(Stringargs)intn=0;intb=999;outer:dob+=2;intm=(int)(Math.ceil(Math.sqrt(b);/取得大于或者等于要判断的数的平方根的最小整数值for(inti=2;i0)if(y0)z=100;elsez=99;此处的else与if(y0)相配。即当x0且y0)if(y0)z=100;/此处多了一对花括号elsez=99;此时,else与if(x0)相配。也就是说,当x=0时,z的值为99(与y的值没关系)。,注意,else总是与离它最近的if配对。如果需要,可以通过“”来改变配对关系。,例2.22用If-else语句多重嵌套实现判断某月份属于哪个季节,月份由命令行参数给出。,classIfSeasonpublicstaticvoidmain(Stringargs)System.out.println(请输入一个有效月份:);if(args.length!=1)System.err.println(请重新执行,一定要输入一个整数!);System.exit(-1);intmonth=Integer.parseInt(args0);System.out.println(你输入的月份是:+month);Stringseason;if(month=12|month=1|month=2)season=冬季;elseif(month=3|month=4|month=5)season=春季;elseif(month=6|month=7|month=8)season=夏季;elseif(month=9|month=10|month=11)season=秋季;elseseason=无效的月份!请重新执行。;System.out.println(所处季节为:+season);,switch语句,if语句的嵌套形式能够实现多路分支,满足程序流程控制的要求,但是不够灵活,书写麻烦,可读性也不大好。在Java中,为多路选择流程控制专门提供了一个语句switch语句,其语法形式如下:Switch(表达式)case常量1:语句1break;case常量2:语句2break;case常量n:语句nbreak;default:默认处理语句break;,switch语句,(1)用作判断的表达式必须是符合byte,char,short,int类型的表达式,不能是float,long或string;(2)switch语句将表达式的值依次与每个case子句中的常量值相比较。如果匹配成功,则执行该case子句中的语句,直到遇到break语句为止;(3)case子句中的类型必须与表达式的类型相容,而且每个case子句中常量的值必须是不同的;(4)default子句是可选的,当表达式的值与任意case子句中的值都不匹配时,就执行default后的语句;(5)break语句用来在执行完一个case分支后,使程序跳出switch语句,执行switch语句的后续语句。一般在每个case分支后,要用break来中止后面的case分支语句。,使用switch语句注意事项:,switch语句,(6)在一些特殊情况下,如多个不同的case值要执行一组相同的操作,可写成下面的形式:case常量n:case常量n+1:语句break;(7)case分支中包括多个执行语句时,可以不用花括号“”括起;(8)通过if-else语句可以实现switch语句所有功能。但通常使用switch语句更简练,且可读性强,程序执行效率高。,使用switch语句注意事项:,例2.22用switch语句实现判断某月份属于哪个季节,月份由命令行参数给出。,classSwitchSeasonpublicstaticvoidmain(Stringargs)System.out.println(请输入一个有效月份:);if(args.length!=1)System.err.println(请重新执行,一定要输入一个整数!);System.exit(-1);intmonth=Integer.parseInt(args0);System.out.println(你输入的月份是:+month);Stringseason;switch(month)case12:case1:case2:season=冬季;break;/续下页,/接上页case3:case4:case5:season=春季;break;case6:case7:case8:season=夏季;break;case9:case10:case11:season=秋季;break;default:season=无效的月份!请重新执行。;System.out.println(所处季节为:+season);,2.4算法设计举例,穷举也称为枚举,其基本思想是一一列举可能进行的测试,从中找出符合条件的解。通过计算机实现高速运算,借助重复结构实现穷举。在设计穷举算法时,在保证思路严密,清晰,有条理,不漏解的情况下,应尽量减小穷举规模。下面举例说明。,1穷举,2.4算法设计举例穷举,publicclassTest_keypublicstaticvoidmain(Stringargs)intx,y,z;intmax=(int)(Math.floor(Math.sqrt(300);/求出不大于300的平方根的最小整数for(x=1;x=max;x+)for(y=1;y=max;y+)if(y=x)continue;for(z=1;z=max;z+)if(z*z=x*x+y*y)System.out.println(x+t+y+t+z);/*endforz*/*endfory*/*endforx*/*endmain*/,例2.24写一程序,输出所有1到300间的满足x2+y2=z2的整数x,y,z的组合(要求x,y,z各不相等)。

温馨提示

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

评论

0/150

提交评论