版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第5章方法2开放问题分别求出1
到10、20
到30、35到45的整数和。3问题intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);4问题intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);5解决方案publicstaticintsum(inti1,inti2){intsum=0;for(inti=i1;i<=i2;i++)sum+=i;returnsum;}publicstaticvoidmain(String[]args){System.out.println("Sumfrom1to10is"+sum(1,10));System.out.println("Sumfrom20to30is"+sum(20,30));System.out.println("Sumfrom35to45is"+sum(35,45));}6学习目标定义方法、调用方法以及传参数给方法(第5.2-5.5节)。开发模块化的、易读、易调试以及易维护的可重用代码(第5.6节)。使用方法重载和理解歧义重载(第5.7节)。设计和实现重载方法(第5.8节)。确定变量的作用域(第5.9节)。了解如何使用Math
类中的方法(第5.10-5.11节)。学习方法抽象的概念(第5.12节)。使用逐步求精的方法设计和实现方法(第5.12节)。7定义方法方法是为完成一个操作而组合在一起的语句。8方法签名方法签名包括方法名和参数列表。9形式参数定义在方法头的变量被称作形式参数。10实际参数当方法被调用时,就传递给参数一个值。这个值被称作实际参数或实参。11返回数据类型方法可以返回一个值。returnValueType是方法返回值的数据类型。如果方法不返回值,那么returnValueType就是关键字void。例如:在main
方法中returnValueType就是void。12调用方法测试max方法这个方法演示调用一个方法max返回一个最大int值的过程。TestMax13调用方法(续)动画14跟踪方法调用现在i是5动画15跟踪方法调用现在j是2动画16跟踪方法调用调用max(i,j)动画17跟踪方法调用调用max(i,j)将i的值传递给num1将j的值传递给num2动画18跟踪方法调用声明变量result动画19跟踪方法调用因为num1是5而num2是2所以(num1>num2)为真动画20跟踪方法调用现在result是5动画21跟踪方法调用返回result,它的值为5动画22跟踪方法调用返回max(i,j)并将返回值赋给k动画23跟踪方法调用执行打印语句动画24注意对有返回值的方法而言,return语句是必需的。下图(a)中显示的方法在逻辑上是正确的,但它会有编译错误,因为Java认为该方法可能不会返回任何值。为解决这个问题,需要删除(a)中的if(n<0),这样,不管if
语句怎么执行,编译器总可以到达return语句。25在其它类中重用方法注意:方法的一个好处就是重用。
max
方法除了可以从TestMax中调用,还可以被其它类调用。如果你创建了一个新类Test,就可以通过使用“类名.方法名”(例如:TestMax.max)调用max
方法。
26调用堆栈27跟踪调用堆栈声明i并初始化i动画28跟踪调用堆栈声明j并初始化j动画29跟踪调用堆栈声明k动画30跟踪调用堆栈调用max(i,j)动画31跟踪调用堆栈将i和j的值传递给
num1和num2动画32跟踪调用堆栈将i和j的值传递给num1和num2动画33跟踪调用堆栈(num1>num2)为真动画34跟踪调用堆栈将num1的值赋给result动画35跟踪调用堆栈返回result的值并将它赋给k动画36跟踪调用堆栈执行打印语句动画37void方法举例这种类型的方法不返回值。这种方法会执行一些动作。TestVoidMethod38传递参数publicstaticvoidnPrintln(Stringmessage,intn){for(inti=0;i<n;i++)System.out.println(message);}假设你使用nPrintln(“WelcometoJava”,5);调用了一个方法,输出是什么?假设你使用nPrintln(“ComputerScience”,15);调用了一个方法,输出是什么?39通过值传递这个程序演示传值给方法。Increment40通过值传递测试通过值传递这个程序演示如何传值给方法TestPassByValue41通过值传递(续)42模块化代码使用方法可以减少冗余的代码并且提高代码的重用性。方法也可以用来模块化代码同时提高程序质量。GreatestCommonDivisorMethodPrimeNumberMethod43重载方法重载max方法publicstaticdoublemax(doublenum1,doublenum2){if(num1>num2)returnnum1;elsereturnnum2;}TestMethodOverloading44歧义调用有时可能会有两个或两个以上和方法调用相匹配,但是编译器无法判断哪个是最精确的匹配。这个问题被称为歧义调用(ambiguousinvocation)。
歧义调用是一个编译错误。45歧义调用publicclassAmbiguousOverloading{publicstaticvoidmain(String[]args){System.out.println(max(1,2));}
publicstaticdoublemax(intnum1,doublenum2){if(num1>num2)returnnum1;elsereturnnum2;}
publicstaticdoublemax(doublenum1,intnum2){if(num1>num2)returnnum1;elsereturnnum2;}}46问题:将十进制数转换成十六进制数编写一个将十进制整数转换成十六进制整数的程序。Decimal2HexConversion47变量的作用域局部变量:在方法里定义的变量域:程序中包含某变量的块局部变量的作用域从声明该变量的地方开始,直到包含该变量的块结束为止。
局部变量都必须在使用之前进行声明。48变量的作用域(续)你可以在一个方法的不同块里声明相同的变量多次,
但是不能在嵌套块或同一块中两次声明同一变量。49局部变量的作用域(续)在
for
循环头中初始动作部分声明的变量,其作用域是整个for循环。但是在
for
体内声明的变量,其作用域只限于循环体内,是从声明它的地方开始,到包含该变量的块结束为止。50局部变量的作用域(续)51局部变量的作用域(续)//FinewithnoerrorspublicstaticvoidcorrectMethod(){intx=1;inty=1;//iisdeclaredfor(inti=1;i<10;i++){x+=i;}//iisdeclaredagainfor(inti=1;i<10;i++){y+=i;}}52局部变量的作用域(续)//WithnoerrorspublicstaticvoidincorrectMethod(){intx=1;inty=1;for(inti=1;i<10;i++){intx=0;x+=i;}}53方法抽象你可以把方法体想象成一个装有方法执行细节的黑箱。54方法的优点一旦写出一个方法就可以在任何地方重用它。信息隐藏:方法的实现细节封装在方法内,对使用该方法的用户来说是隐藏的。减少复杂度。55
Math类类常量PIE类方法三角函数方法指数函数方法取整方法min、max、abs和random方法56三角函数方法sin(doublea)cos(doublea)tan(doublea)acos(doublea)asin(doublea)atan(doublea)弧度toRadians(90)举例:Math.sin(0)返回0.0Math.sin(Math.PI/6)返回0.5Math.sin(Math.PI/2)返回1.0Math.cos(0)返回1.0Math.cos(Math.PI/6)返回0.866Math.cos(Math.PI/2)返回057指数函数方法exp(doublea)返回e
的a次方。log(doublea)返回a的自然对数。log10(doublea)返回以10为底的a的对数。pow(doublea,doubleb)返回a的b次方。sqrt(doublea)返回a的平方根。举例:Math.exp(1)返回2.71Math.log(2.71)返回1.0Math.pow(2,3)返回8.0Math.pow(3,2)返回9.0Math.pow(3.5,2.5)返回22.91765Math.sqrt(4)返回2.0Math.sqrt(10.5)返回3.2458取整方法doubleceil(doublex)x取向下离它最接近的整数
,这个整数将以一个
double类型的值返回。doublefloor(doublex)x取向下离它最接近的整数,
这个整数将以一个double类型的值返回。doublerint(doublex)x取离它最接近的整数。如果
x距离两个整数同样接近,就返回成偶数的double类型值。intround(floatx)
返回(int)Math.floor(x+0.5)。longround(doublex)返回(long)Math.floor(x+0.5)。
59取整方法举例Math.ceil(2.1)返回3.0Math.ceil(2.0)返回2.0Math.ceil(-2.0)返回–2.0Math.ceil(-2.1)返回-2.0Math.floor(2.1)返回2.0Math.floor(2.0)返回2.0Math.floor(-2.0)返回–2.0Math.floor(-2.1)返回-3.0Math.rint(2.1)返回2.0Math.rint(2.0)返回2.0Math.rint(-2.0)返回–2.0Math.rint(-2.1)返回-2.0Math.rint(2.5)返回2.0Math.rint(-2.5)返回-2.0Math.round(2.6f)返回3Math.round(2.0)返回2Math.round(-2.0f)返回-2Math.round(-2.6)返回-3
60min、max和absmax(a,b)和min(a,b)返回两个参数的最大和最小值。abs(a)返回参数的绝对值。random()返回大于等于0.0且小于1.0的double
型随机数。举例:Math.max(2,3)返回3Math.max(2.5,3)返回3.0Math.min(2.5,3.6)返回2.5Math.abs(-2)返回2Math.abs(-2.1)返回2.161
random
方法生成大于等于0.0且小于1.0的
double
型随机数(0<=Math.random()<1.0)举例:通常,62实例学习:生成随机字符计算机处理的是数值数据和字符。你已经看到许多涉及数值数据的例子。了解字符和如何处理字符也同样重要。正如第2.9节介绍的那样,每个字符都有唯一的一个从0到FFFF(即十进制的65535)的十六进制数
。要生成一个随机字符就是使用下面的表达式生成0到
65535之间的随机数:(注意:因为
0<=Math.random()<1.0所以必须给
65535加1):(int)(Math.random()*(65535+1))63实例学习:生成随机字符(续)现在让我们考虑如何生成一个随机小写字母。
小写字母的统一码是一串连续的整数,从小写字母‘a’的统一码开始,然后是‘b’、‘c’、...、‘z’。‘a’的统一码是(int)'a'所以,从(int)'a'到
(int)'z'的随机整数是(int)((int)'a'+Math.random()*((int)'z'-(int)'a'+1)64实例学习:生成随机字符(续)现在让我们考虑如何生成一个随机小写字母。
小写字母的统一码是一串连续的整数,从小写字母‘a’的统一码开始,然后是‘b’、‘c’、...、‘z’。‘a’的统一码是(int)'a'所以,从(int)'a'到
(int)'z'的随机整数是(int)((int)'a'+Math.random()*((int)'z'-(int)'a'+1)65实例学习:生成随机字符(续)正如第章中所讨论的,所有的数值运算符都可以应用到
char操作数上。如果另一个操作数是数字或字符,那么char型操作数就会被转换成一个数字。这样,前面的表达式就可以被简化成如下所示:'a'+Math.random()*('z'-'a'+1)
这样,随机的小写字母就是:(char)('a'+Math.random()*('z'-'a'+1))66实例学习:生成随机字符(续)推广前面的讨论可以生成任意两个在
ch1和
ch2之间的随机字符,其中
ch1<ch2,如下所示:(char)(ch1+Math.random()*(ch2–ch1+1))
67RandomCharacter类//RandomCharacter.java:GeneraterandomcharacterspublicclassRandomCharacter{/**Generatearandomcharacterbetweench1andch2*/publicstaticchargetRandomCharacter(charch1,charch2){return(char)(ch1+Math.random()*(ch2-ch1+1));}
/**Generatearandomlowercaseletter*/publicstaticchargetRandomLowerCaseLetter(){returngetRandomCharacter('a','z');}
/**Generatearandomuppercaseletter*/publicstaticchargetRandomUpperCaseLetter(){returngetRandomCharacter('A','Z');}
/**Generatearandomdigitcharact
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 婚礼策划师岗前岗后考核试卷含答案
- 焊接专机装配工持续改进评优考核试卷含答案
- 2026年人行心理模拟题及答案详解
- 矿灯和自救器管理工安全宣传水平考核试卷含答案
- 皮具设计师岗前基础模拟考核试卷含答案
- 2026年Cnas认证核心模拟试题(含答案)
- 轧钢成品工操作安全能力考核试卷含答案
- 2026年财务会计专题模拟试题(含答案)
- 2026年电大本科法学商法模拟试题(含答案)
- 2026年护理层级培训模拟试题(含答案)
- 2026年爆破员考试模拟试题新题库附答案
- 老年髋部骨折患者围手术期管理专家共识
- 车辆叉车日常检查记录表
- 江苏省无锡市2025-2026学年高三上学期11月期中考试地理试卷
- 《信息技术基础》课件 第2章 Windows11操作系统
- 国企党建考试题库及答案
- 西安交通大学少年班自主招生物理试卷试题及答案(2025年)
- 《WPS AI智能办公应用大全》全套教学课件
- 财务经营意识培训
- 电气火灾 培训 课件
- 2025年行政执法人员执法证考试必考多选题库及答案(共160题)
评论
0/150
提交评论