Java常用类---Math类和Random类

Math类

简介

Java中,Math类包含了用于执行基本数学运算的属性和方法。Math类的方法都被定义为static形式(静态方法),通过Math类可以直接在主函数中直接调用。

如下图所示,Math.PI等于圆周率π、Math.E等于常量e……等属性和方法。

部分Math类方法介绍

  1. Math.abs 求绝对值,代码如下式所示。

    public static void main(String[] args) {int i = -1;double j = -1.5;//Math.abs方法输出绝对值(可为整数或小数)System.out.println(i+" 的绝对值结果为:"+Math.abs(i));System.out.println("==============================");System.out.println(j+" 的绝对值结果为:"+Math.abs(j));}

    运行结果,如下图所示。

  2. Math.sin 正弦函数,代码如下式所示。

        public static void main(String[] args) {double i = 30;//将角度转换为弧度double j = Math.toRadians(i);//j == π/6System.out.printf("弧度值为:"+"%.6f%n",j);System.out.printf("正弦值为:"+"%.2f%n",Math.sin(j));//将弧度转换为角度double k = Math.toDegrees(j);//k == 30°System.out.printf("角度为:"+"%.2f%n",k);}

    其中:Math.toDegrees为弧度转化为角度,Math.toRadians为角度转化为弧度。

    运行结果,如下图所示。

    同理可得,余弦函数Math.cos、正切函数Math.tan、反正弦函数Math.asin、反余弦函数Math.acos、反正切函数Math.atan、商的反正切函数Math.atan2的使用与上述相当。

    注:使用Math.sin等方法时,传入参数是角度,角度单位是弧度值形式。

  3. Math.ceil 对某数进行向上取整,ceil是天花板的意思,即返回大的值,代码如下式所示。

        public static void main(String[] args) {double a = -10.2;double b = -0.2;double c = -1.7;double d = 2.5;/*对某数进行向上取整。*在本例中某数是指变量a、b、c、d*/System.out.println(Math.ceil(a));System.out.println(Math.ceil(b));System.out.println(Math.ceil(c));System.out.println(Math.ceil(d));}

    运行结果,如下图所示。

  4. Math.floor 向下取整,floor是地板的意思,即返回小的值,代码如下式所示。

        public static void main(String[] args) {double a = -10.2;double b = -0.2;double c = -1.7;double d = 2.5;/*对某数进行向下取整。*在本例中某数是指变量a、b、c、d*/System.out.println(Math.floor(a));System.out.println(Math.floor(b));System.out.println(Math.floor(c));System.out.println(Math.floor(d));}

    运行结果,如下图所示。

    注:与Math.ceil方法相同,Math.floor方法的返回值也是double形式。

  5. Math.IEEEremainder(x, y) 求余数。其中,x为被除数,y为除数,返回值是根据IEEE 754标准返回余数,代码如下式所示。

        public static void main(String[] args) {double x = 15;double y = 4;System.out.println("Math.IEEEremainder方法的余数结果为:"+Math.IEEEremainder(x, y));System.out.println(x+"%"+y+"的余数结果为:"+(x%y));}

    运行结果,如下图所示。

    补充:由上图可以看出,所得余数结果与15%(取余)4的结果有所不同。本质原因是n值的取值不同!!!

    Math.IEEEremainder和运算符"%"的返回的余数都等于x - y * n ,但前者的n是取最接近x/y的整数,如果x/y返回的是介于两个整数之间的数,则n取值为偶数的一方。eg:x = 15, y = 4, x/y在(3,4)两个整数区间内,故n取4。

    而对于运算符"%"来说,n取值为x/y的整数结果。eg:x = 15, y = 4, x/y的整数部分为3,故n取3。

  6. Math.max 比较并返回两数中的最大值,Math.min 比较并返回两数中的最小值,代码如下式所示。

        public static void main(String[] args) {int a = 10;int b = 12;System.out.println("参数a和参数b中最大的数为:"+Math.max(a, b));System.out.println("参数a和参数b中最小的数为:"+Math.min(a, b));
    ​}

    运行结果,如下图所示。

  7. Math.sqrt 开平方,代码如下式所示。

        public static void main(String[] args) {int a = 25;int b = 100;System.out.println(a+" 的开方值为:"+Math.sqrt(a));System.out.println(b+" 的开方值为:"+Math.sqrt(b));}

    运行结果,如下图所示。

  8. Math.pow 求某数的任意次方,代码如下式所示。

        public static void main(String[] args) {double x = 25;int y = 100;double a = 2;int b = 3;System.out.println(x+"的"+a+"次方为:"+Math.pow(x, a));System.out.println(y+"的"+b+"次方为:"+Math.pow(y, b));}

    运行结果,如下图所示。

    其中,Math.pow(x, a)指的是求x的a次方,Math.pow(y, b)同理。当数值溢出的时候抛出ArithmeticException异常。

  9. Math.exp 开平方,代码如下式所示。

        public static void main(String[] args) {double a = 2;System.out.printf("e"+"的"+a+"次方为:"+"%.3f%n", Math.exp(a));}

    运行结果,如下图所示。

  10. Math.log 自然对数,即以e为底的对数,代码如下式所示。

    public static void main(String[] args) {double a = 1000;double b = Math.pow(Math.E, 2);System.out.println("以10为底"+a+"的对数为:"+Math.log10(a));System.out.printf("以e为底"+"e^2的对数为:"+Math.log(b));}

运行结果,如下图所示。

补充:Math.log10 指以10为底的对数,如上图所示。

  1. Math.rint 四舍五入求距离x最近的整数,结果可能大于x,也可能小于x,代码如下式所示。

        public static void main(String[] args) {double x = -5.23;double x1 = 10.5;double x2 = 10.53;System.out.println(x +"经过Math.rint方法后,结果为:"+Math.rint(x));System.out.println(x1 +"经过Math.rint方法后,结果为:"+Math.rint(x1));System.out.println(x2 +"经过Math.rint方法后,结果为:"+Math.rint(x2));}

    运行结果,如下图所示。

    其中,当取值为x.5时,rint方法计算距离最近的整数,返回偶数值,返回值的类型为double类型。

  2. Math.round 四舍五入求距离x最近的整数,与Math.rint类似。但该方法返回值类型为int型或者long型,且对于x.5类型数据,不存在rint方法的问题,代码如下式所示。

        public static void main(String[] args) {double x = -5.23;double x1 = 10.5;double x2 = 10.53;float x3 = 12.5F;System.out.println(x +"经过Math.round方法后,结果为:"+Math.round(x));System.out.println(x1 +"经过Math.round方法后,结果为:"+Math.round(x1));System.out.println(x2 +"经过Math.round方法后,结果为:"+Math.round(x2));System.out.println(x2 +"经过Math.round方法后,结果为:"+Math.round(x3));}

    运行结果,如下图所示。

    注:Math.round方法中,当参数为float类型时,返回值为int类型。当参数为double类型时,返回值为long类型。

  3. Math.random 返回0,1之间的一个随机数,范围在[0,1),代码如下式所示。

        public static void main(String[] args) {System.out.println("输出一个在[0,1)之间的数:"+Math.random());System.out.println("输出一个在[1,2)之间的数:"+Math.random()+1);}

    运行结果,如下图所示。

    补充:可以通过在Math.random()方法后加x来改变随机数产生的范围,新的范围为:[0+x, 1+x)

Random类

Random随机数生成方法

上一节,介绍了Math类中的random方法。调用这个方法能够返回一个范围在[0.0,1.0)之间的double值。

除此之外,在Random类中还存在另一种随机数生成方法。如下所示。

  1. Random():创建一个新的随机数生成器。

  2. Random(long seed):使用单个long种子创建一个新的随机数生成器。

    注:在创建一个Random对象的时候可以给定任意一个合法种子数,种子数只是随机算法的起源数字,和生成的随机数区间没有关系!!!

代码演示如下式所示。

    public static void main(String[] args) {//对象的种子缺省值为当前系统时间的毫秒数Random rand = new Random();//rand.nextInt()中的参数为随机数的上限,产生区间不包括上限。int i = rand.nextInt(200);System.out.println("产生的随机数为:"+i);}

运行结果,如下图所示。

注:对于种子相同的Random对象,所生成的随机数序列一样!!!如下图所示。

Random类中部分方法介绍

  1. nextBoolean() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。

  2. nextDouble() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在0.0 和 1.0之间均匀分布的 double 值。

  3. nextFloat() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在0.0 和 1.0之间均匀分布的 float 值。

  4. nextInt() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 int 值。

  5. nextLong() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。

  6. nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。如下式所示。

    Random rand = new Random(50); 
    int i = rand.nextInt(100);//范围在[0, 100)
    System.out.println("产生的随机数为:"+i);
  7. nextGaussian() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,标准偏差是 1.0。

  8. setSeed(long seed) 使用单个 long 种子设置此随机数生成器的种子。

  9. nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的字节数组中。如下图所示。

补充:生成[0.0, 1.0)之间的小数、生成[0.0, 5.0)之间的小数、生成[1.0, 2.5)之间的小数,如下图所示。

注:本质上是对区间的乘加。eg:[1.0, 2.5) == [(0.0* 1.5)+1 , (1* 1.5)+1)

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

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

相关文章

仿真验证方法(2)——静态验证

一、静态验证 1.1 概述 在之前的文章中,我们介绍了动态仿真,但是动态仿真用于百万门以上电路时所需时间极长,而且其功能覆盖率取决于所设计的输入激励向量,很难达到100%,因此静态时序分析和等效性检查这样的静态验证是…

SwiftUI之深入解析布局协议

一、什么是布局协议? 采用布局协议类型的任务,是告诉 SwiftUI 如何放置一组视图,需要多少空间。这类型常常被作为视图容器,虽然布局协议是 2022 年新推出的(至少公开来说),但是我们在第一天使用…

1Panel应用推荐:AList开源文件列表工具

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

逆变器2(原理框图)

总流程 输入(低压直流24Vdc)——升压(DC—DC)(高压直流369Vdc) ——逆变(DC—AC)(交流220V) 升压电路:BOOST电路、LLC电路、推挽电路 逆变器过程…

【C++】:C++中的STL序列式容器vector源码剖析

⛅️一 vector概述 vector的使用语法可以参考文章:​ 总的来说:vector是可变大小数组 特点: 支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢 元素保存在连续的内存空间中,因此通过下标取值非常快 在容器中间位置添加…

Linux中PyTorch的安装教程

在安装PyTorch之前,我们需要确保已经安装了Python和pip。可以使用以下命令检查是否已经安装: python --version pip --version如果没有安装,可以使用以下命令安装: sudo apt-get update sudo apt-get install python3 sudo apt-…

如何解决NAND系统性能问题?--NAND分类

一、故事引言 想象一下,你正在管理一座神奇的数据仓库,这个仓库没有沉重的门、旋转的磁盘和机械手臂,而是由一群训练有素的“数据小飞侠”组成。这些小飞侠们居住在一个叫做闪存芯片(NAND Flash,本文主人公&#xff0…

【MFC实践】基于MFC向导C++制作计算器(附文件)

一、写在前面1.1 什么是MFC向导?1.2 使用MFC向导制作计算器1.3安装visual studio 2022和MFC插件 二、设计计算器界面1.1 新创建MFC项目1.2 设计计算器界面1.3 添加相关变量1.4 算法的一些问题及解决方式1.5 计算功能的实现1.6 其它功能的实现1.6.1 DEL功能1.6.2 C置…

Spring Cache 的使用

大家好我是苏麟 , 今天聊聊Spring Cache . Spring Cache Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现&#xff0c…

计算机丢失mfc140.dll怎么办?解决mfc140.dll缺失的3种方法分享

计算机丢失mfc140.dll怎么办?在使用微软办公软件的时候,可能会弹出一个错误提示框说“找不到mfc140.dll,无法继续执行代码”。为了不影响工作效率,我们可能需要亲自动手尝试修复这一问题。以下是一些mfc140.dll缺失的3种方法相关介…

写一个简单的Java的Gui文本输入窗口,JFrame的简单使用

JFrame是指一个计算机语言-java的GUI程序的基本思路是以JFrame为基础,它是屏幕上window的对象,能够最大化、最小化、关闭。 Swing的三个基本构造块:标签、按钮和文本字段;但是需要个地方安放它们,并希望用户知道如何处理它们。JFrame 类就是解决这个问题的——它是一个容器…

用单片机设计PLC电路图

自记: 见另一篇文章,MOS驱动差了一个充电电容,栅极电容充电会有问题; 光耦用的直插,但板子用的贴片,此文档仅供参考 基本列出了PCB板情况,基础元器件,部分连接,原理等…