java重载方法math_Java语言程序设计(十二)Math数学类,方法重载及变量作用域...

1.重载方法

上一篇文章用到的max方法只能用于int型数据类型,但是如果需要决定两个浮点数中哪个较大,解决方法是创建另一个方法名相同但参数不同的方法,代码如下:

public static double max(double num1, double num2){

if(num1>num2)

return num1;

else

return num2;

}

如果调用带int型参数的max方法,就将调用需要int型的max方法,如果需要double型参数的max方法,就将调用需要double型参数的max方法,这称为方法重载,在一个类中有两个方法,它们具有相同的名字,但有不同的参数列表,Java编译器根据方法签名决定使用哪个方法。

下面我们用一个例子来说明,我们想写一个程序,程序中创建三个方法,第一个方法为求最大整数,第二个方法为求最大双精度数,第三个方法求三个双精度数中的最大值,这三个方法都被命名为max,程序清单如下:

package testmax;

/**

*

* @author john

*/

public class TestMax {

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

// TODO code application logic here

System.out.println("The maxium between 3 and 4 is"+max(3,4));

System.out.println("The maxium between 3.0 and 5.4 is"+max(3.0,5.4));

System.out.println("The maxium between 3.0 , 5.4 and 10.14 is"+max(3.0,5.4,10.14));

}

public static int max(int num1,int num2){

if(num1>num2)

return num1;

else

return num2;

}

public static double max(double num1,double num2){

if(num1>num2)

return num1;

else

return num2;

}

public static double max(double num1,double num2,double num3){

return max(max(num1,num2),num3);

}

}

72a82de86187c4e1770c241604674d1f.png

当调用max(3,4)时,调用的是两个整数中较大值的max方法,当调用max(3.0,4.5)时,调用的是求两个双精度数中较大值的max方法。当调用max(3.0,5.4,10.14)时,调用的是求三个双精度数中最大值的max方法。

我们同样也可以调用像max(3,2.5)这样带一个int值和一个double值得max方法,那就是调用求两个double数中较大值的方法,实参值2自动转换为double值,然后传递给这个方法。

我们可能都会有一些疑惑,那就是为什么调用max(3,4)时不会使用max(double,double)呢,其实max(double,double)和max(int,int)都是可能的匹配,在调用方法时,Java编译器寻找最精确匹配的方法,因为int更为精确,所以调用的是max(int,int),如果两个方法谁也不比谁精确,就会出现歧义,导致编译错误。

2.变量的作用域

变量的作用域是指变量可以在程序中引用的范围,在方法中定义的变量称为局部变量。局部变量的作用域从声明变量的地方开始,直到包含该变量的块结束为止。局部变量都必须在使用之前进行声明和赋值,下面举一个例子:

public static void method(){

int x=1;

int y=1;

for(int i=1;i<10;i++){

x=x+i;

}

for(int i=1;i<10;i++){

y=y+i;

}

}

由这个例子我们可以看到,我们可以在一个方法的不同块里声明同名的局部变量,但是不能在嵌套块中或同一块中两次声明一个局部变量。下面这种就是错误的编程写法

public static void method2(){

int x=1;

int sum=0;

for(int x=1;x<10;x++){

sum=sum+x;

}

我们再举一个错误的例子:

for(int i=0;i<10;i++){

}

System.out.println("i");

这个程序的错误在于,我们不要在块内声明变量,然后企图在块外使用它,因为i没有在for循环之外定义,所以最后一条语句就会产生一个语法错误。

3.Math数学类

Math类包含完成基本数学函数所需的方法,我们在之前的学习中已经

使用过方法pow(a,b),也使用过方法Math.random,我们这次会介绍Math类中其他的方法,这些方法分为三类:三角函数方法,指数函数方法和服务方法,除了这些方法之外,Math类还提供了两个很有用的double型常量,PI和E(自然对数的底),可以在任意程序中用Math.PI和Math.E的形式来使用这两个常量。

(1)三角函数方法

Math类包含下面的三角函数方法:

public static double sin(double radians)

public static double cos(double radians)

public static double tan(double radians)

public static double toRadians(double degree)

public static double toDegrees(double radians)

public static double asin(double a)

public static double acos(double a)

public static double atan(double radians)

sin,cos,tan的参数都是以弧度为单位的角,asin,acos,atan的返回值是在-Π/2到Π/2之间的一个弧度值。

例如:

Math.toDegrees(Math.PI/2) returns 90.0

Math.toRadians(30) returns Π/6

Math.sin(0) returns 0.0

Math.sin(Math.toRadians(270)) returns -1.0

Math.sin(Math.PI/6) returns 0.5

Math.sin(Math.PI/2) returns 1.0

Math.cos(0) returns 1.0

Math.asin(0.5) returns Π/6

(2)指数函数方法

Math类中有五个与指数函数有关的方法:

public static double exp(double x)   返回e的x次幂

public static double log(double x)  返回ln(x)

public static double log10(double x)  返回log10(x)

public static double pow(double a,double b)  返回a的b次幂

public static double sqrt(double x)  返回根号x

3.min max和abs方法

重载min和max方法返回两个数的最小值和最大值,重载abs返回一个数的绝对值。Math.abs(-2) returns 2

4.random方法

我们已经使用过random方法,生成大于等于0.0小于1.0的double型随机数,我们可以用它编写简单的表达式,生成任意范围的随机数。

int (Math.random()*10)  返回0到9之间的随机数。

50+ (int)(Math.random()*10)  返回50到59之间的随机数。

a + (int)(Math.random()*b)   返回一个a到a+b之间但不包括a+b的随机数

5.取整方法

public static double ceil(double x)  返回比这个数大的最近的整数

public static double floor(double x)  返回比这个小的最近的整数

public static double rint(double x)  返回其值最接近参数并且是整数的double值。如果两个整数的double值都同样接近,那么结果取偶数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编码(转)

https://www.zhihu.com/question/28164512 关于编码和乱码的问题&#xff0c;我简单讲一下。 通常问这类问题的人是混淆了若干个不同的概念&#xff0c;并且他们自己也没有意识到自己混淆了这些概念的。 终端显示字符的编码&#xff08;windows下终端是cmd&#xff0c;linux下是…

Spring MVC:测试简介

测试是软件开发中最重要的部分之一。 井井有条的测试有助于使应用程序代码保持良好状态&#xff0c;并且处于工作状态。 有很多不同类型的测试和方法。 在本文中&#xff0c;我想对基于Spring MVC的应用程序进行单元测试进行介绍。 不要希望在这里阅读有关Spring MVC测试的全部…

yaml,json,ini这三种格式用来做配置文件优缺点

适合人类编写&#xff1a;ini > toml > yaml > json > xml > plist可以存储的数据复杂度&#xff1a;xml > yaml > toml ~ json ~ plist > ini 作者&#xff1a;赵扶摇链接&#xff1a;https://www.zhihu.com/question/41253282/answer/119857880来源&…

试验ConcurrentHashmap

我正在研究我最近的一个项目中的内存问题&#xff0c;该项目将数据保留在内存中以进行快速访问&#xff0c;但是应用程序的内存占用量非常大。 该应用程序大量使用CHM&#xff08;即Concurrenthashmap&#xff09; &#xff0c;因此&#xff0c;无需再费脑筋地猜测CHM是问题所…

CSS的position属性:relative和absolute

relative&#xff1a;是相对于自己来定位的&#xff0c;例如&#xff1a;#demo{position:relative;top:-50px;},这时#demo会在相对于它原来的位置上移50px。如果它之前的元素也为relative并有偏移&#xff0c;则两个偏移不想加&#xff0c;relative只在它原本所在位置上进行偏移…

java线程池任务失败_ThreadPoolExecutor线程池任务执行失败的时候会怎样

1. 任务执行失败时的处理逻辑1.1. WorkerWorker相当于线程池中的线程可以看到&#xff0c;Worker有几个重要的属性&#xff1a;thread &#xff1a; 这是Worker运行的线程&#xff0c;可以理解为一个Worker就是一个线程firstTask &#xff1a; 初始任务&#xff0c;可能为为n…

转:HttpModule与HttpHandler详解

ASP.NET对请求处理的过程&#xff1a;当请求一个*.aspx文件的时候&#xff0c;这个请求会被inetinfo.exe进程截获&#xff0c;它判断文件的后缀&#xff08;aspx&#xff09;之后&#xff0c;将这个请求转交给 ASPNET_ISAPI.dll&#xff0c;ASPNET_ISAPI.dll会通过http管道&…

bzoj 5248: [2018多省省队联测]一双木棋

Description 菲菲和牛牛在一块n行m列的棋盘上下棋&#xff0c;菲菲执黑棋先手&#xff0c;牛牛执白棋后手。棋局开始时&#xff0c;棋盘上没有任何棋子&#xff0c; 两人轮流在格子上落子&#xff0c;直到填满棋盘时结束。落子的规则是&#xff1a;一个格子可以落子当且仅当这个…

java 数据返回类_java返回数据工具类

1 importcom.qbskj.project.util.SpringUtils;23 /**4 * 消息5 *6 */7 public classMessage {89 /**10 * 类型11 */12 public enumType {1314 /**成功*/15 success,1617 /**警告*/18 warn,1920 /**错误*/21 error22 }2324 /**类型*/25 privateType type;2627 /**内容*/28 priva…

MOXy的对象图和动态JAXB

JAXB&#xff08;JSR-222&#xff09;使您可以轻松地将域类的实例转换为XML。 EclipseLink MOXy实现提供了一个称为Dynamic JAXB的扩展&#xff0c;在其中&#xff0c;您没有像真实类那样的映射实例&#xff0c;例如名为DynamicEntity的类。 您可以使用采用属性名称的get和set方…

Processing-Shader-Examples

https://github.com/genekogan/Processing-Shader-Examples 转载于:https://www.cnblogs.com/guochen/p/7681278.html

随记

pip list 查看python所有的安装软件 pip uninstall 卸载 pip3 install 安装 pip install pip -V 查看pip版本 pip install --upgrade pip 对pip升级转载于:https://www.cnblogs.com/zqxqx/p/8906206.html

mysql时间函数总结_MySQL 日期时间函数常用总结

获得当前日期时间(date time)1.1 函数&#xff1a;now()相关函数&#xff1a;current_timestamp()&#xff0c;localtime()&#xff0c;localtimestamp()举例说明&#xff1a;2. 获得当前日期(date)函数&#xff1a;curdate()相关函数&#xff1a;current_date()&#xff0…

Apache CXF – JAX-WS –简单教程

许多Java开发人员认为Web Service实现的任务艰巨-没人能真正责怪他们&#xff0c;尤其是在企业应用程序开发的多年中&#xff0c;这给开发和设计带来了很多复杂性。 对于某些人来说&#xff0c;了解它是构建完整的企业应用程序的下一步-Web服务-是实现面向服务设计的关键方案之…

Linux学习(一)--基本概念

一、Linux概述 Linux是一款全球性的免费的开源的操作系统平台&#xff0c;其特点是实现了多任务多用户处理&#xff0c;主要是依赖内核kernel shell&#xff0c;且占用资源少 &#xff08;最小配置只要4Mb内存就能运行&#xff09;。百度百科概述 Linux是一套免费使用和自由传播…

Java StringBuilder神话被揭穿

神话 用加号运算符连接两个字符串是万恶之源 -匿名Java开发人员 注意 &#xff1a;此处讨论的测试的源代码可以在Github上找到 从大学时代起&#xff0c;我就学会了使用运算符将Java中的String连接视为致命的性能缺陷。 最近&#xff0c;在Backbase R&#xff06;D上进行了一…

UOJ #149. 【NOIP2015】子串

有两个仅包含小写英文字母的字符串 A 和 B。 现在要从字符串 A 中取出 k 个互不重叠的非空子串&#xff0c;然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 B 相等&#xff1f; 注意&#xff1a;子…

一张正方形图片,伴随我一年半,敢问情绪的使用方法

【问题的由来】 图片适配正方形显示方法一 <style> .box{width:400px;height:400px;border:solid 5px red;margin:0 auto;background:#f4f4f4 url() no-repeat center;background-size:cover;} </style> <div class"box" style"background-imag…

java3d创建立方体_Opengl创建几何实体——四棱锥和立方体

//#include #include #include using namespace std;float rtri;float rquad;GLfloat points0[5][3] { {0,1,0},{-1,-1,1},{1,-1,1},{1,-1,-1},{-1,-1,-1} };GLfloat points1[8][3] { {1,1,-1},{-1,1,-1},{-1,1,1},{1,1,1},{1,-1,1},{-1,-1,1},{-1,-1,-1},{1,-1,-1} };//四棱…

《软件需求十步走》阅读笔记06

开发因需求而来&#xff0c;需求开发以需求规划的成果为主要依据。软件需求开发首先要做的是获取需求&#xff0c;得到目标&#xff0c;系统关联情况以及用例的分析&#xff1b;其次是需求分析&#xff0c;软件系统的可行性&#xff0c;用户接口&#xff0c;系统功能&#xff0…