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测试的全部…

试验ConcurrentHashmap

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

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管道&…

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服务-是实现面向服务设计的关键方案之…

Java StringBuilder神话被揭穿

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

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} };//四棱…

WSO2 ESB的一种消息传递方式

正如我之前在WSO2 ESB工作时所发布的那样。 为了更好地理解此ESB&#xff0c;我一直在浏览示例 &#xff08;尚未完成所有示例 &#xff09;。 示例12是关于与ESB的单向消息传递&#xff0c;并使用TCP监视器使其可见。 我之前已经介绍过如何设置类似的工具“ TcpTunnelGUI”&am…

Eclipse-Java代码规范和质量检查插件-Checkstyle

CheckStyle是SourceForge下的一个项目&#xff0c;提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程&#xff0c;从而使得开发人员从这项重要但枯燥的任务中解脱出来。它可以根据设置好的编码规则来检查代码。比如符合规范的变量命名&#xff…

介绍一款好用 mongodb 可视化工具

最近想自己搭建一个个人博客&#xff0c;所以学了下mongodb&#xff0c;mongodb是用命令行输入的&#xff0c;有些人可能不太习惯&#xff0c;我自己找了下mongodb的一些可视化工具&#xff0c;发现了一款adminmongo很好用&#xff0c;这里介绍给你们用一下。 github地址&#…

用CSS3来代替JS实现交互

【CSS3和JS】 对于CSS了解的同学都知道&#xff0c;CSS的实现是最底层的&#xff0c;在实现方式和性能上都不是&#xff0c;JS这种提供接口的脚本可比的&#xff1b;从CSS3的动画和JS动画对比角度来看两者&#xff0c;会更清晰&#xff1b;而且随着前端框架的使用&#xff0c;…

php 如何宏定义,php – 在html中实现宏定义的方法

也许显而易见,但C预处理器可以完成这项工作.index._html#define _em(a) a #define _image(a, b) #define _list(a, b, c) a \\ b \ c \#define _theTile The Bar Title#include "head._html"_list(foo, bar, bean)This is really _em(great)_image(media/cat.jpg, …

python——函数 11、命名空间

三种名称空间1、内置名称空间&#xff1a; python解释器自带的名字,如&#xff1a;print、sum、max 当解释器启动时就会形成这个空间 2、全局名称空间&#xff1a; 执行python程序时就会产生这个空间 在每行顶端写代码 a10 def foo():print(a) foo() View Code3&…

Hadoop如何工作? HDFS案例研究

Apache Hadoop软件库是一个框架&#xff0c;该框架允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理。 它旨在从单个服务器扩展到数千台机器&#xff0c;每台机器都提供本地计算和存储。 库本身不用于依靠硬件来提供高可用性&#xff0c;而是被设计用来检测和处…

Java如何避免重量级锁,Java 中锁是如何一步步膨胀的(偏向锁、轻量级锁、重量级锁)...

文章目录重量级锁(Mutex Lock)偏向锁(比较 ThreadID)偏向锁获取过程偏向锁的释放轻量级锁(自旋)轻量级锁的加锁过程轻量级锁的释放总结重量级锁(Mutex Lock)Synchronized 是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的 Mute…

Flexbox布局

Flexbox布局 刚开始接触flex布局的时候&#xff0c;只知道它可以用来使子元素水平垂直居中&#xff0c;代码最为简洁好用。 .container {display: flex;justify-content: center;align-items: center; } 当然不仅仅是居中问题&#xff0c;flexbox能做的事情大多&#xf…

CSS_常见布局

1.一列布局——常用于网站首页。 html&#xff1a; 1 <div class"top"></div> 2 <div class"main"></div> 3 <div classfoot></div> css&#xff1a; 1 body{2 margin:0;3 padding: 0;4 …

会员系统用php框架,代码基地会员中心的PHP签到系统结合thinkphp框架

分享代码基地会员中心的PHP签到系统&#xff0c;PHP很漂亮的签到界面。签到后&#xff0c;会有不同颜色区分。附带PHP签到源码带安装说明和详细注释。(详细查看https://www.daimajidi.com/deal/574)JS:function getUrl(strs) {var url "/demo/1563064903/" strs;re…