【Java 基础】数字相关类Math、Random、SecureRandom

一、概述

  • 当我们要使用函数、取随机数测试时,难免会用到 数字相关类,其中包括Math、Random、SecureRandom。

二、Math

  • Math类主要用于计算常规函数值(x²、sin x、cos x等),也用于取具有特殊含义的值(e、π等 )
  • Math类内有大量的静态方法供我们直接调用,因此,它使用起来十分方便。

下面,我们介绍Math类的常用数值与方法:

1、常用数值:

① PI (圆周率π)

  • 返回一个double类型的圆周率π。
    PI
    打印输出结果:
System.out.println(Math.PI);

运行结果如下:
运行结果

① E (自然对数e)

  • 返回一个double类型的自然对数e。
    E
    打印输出结果:
System.out.println(Math.E);

运行结果如下:
运行结果

2、常用方法:

① abs → 绝对值

  • 计算一个数的绝对值并返回,类型与传入参数一致。
    abs
//分别定义两个负值
int a = -19;
double d = -15.69;
//计算两数的绝对值,并打印输出
System.out.println(Math.abs(a));
System.out.println(Math.abs(d));

运行结果如下:
运行结果

② cos、sin、tan → 正弦、余弦、正切

  • 使用这三个函数可以方便我们计算一个数的正弦、余弦、正切,它们的返回值类型为double。
    在这里插入图片描述
    sin
    tan
    分别计算一个数字正弦、余弦、正切值:
    传入int:
int a = 12;
System.out.println(Math.cos(a));
System.out.println(Math.sin(a));
System.out.println(Math.tan(a));

int
传入double:

double b = 3.14;
System.out.println(Math.cos(b));
System.out.println(Math.sin(b));
System.out.println(Math.tan(b));

double

③ log、log10 → 以e为底对数、以10为底对数

  • 使用这两个函数可以方便我们以e为底对数、以10为底对数,它们的返回值类型为double。
    log
    log10

计算 以e为底e的对数、以10为底10的对数:

System.out.println(Math.log(Math.E));
System.out.println(Math.log10(10));

④ max、min → 最大值、最小值

  • 返回传入两数中的最大值 / 最小值,类型与传入参数一致。
    max
    min

打印输出两数最大值、最小值:

//定义两个大小不等的int类型变量
int a = 12;
int b = 19;
//定义两个大小不等的double类型变量
double c = 12.94;
double d = 15.69;
//打印输出最大值、最小值
System.out.println(Math.max(a,b));
System.out.println(Math.min(c,d));

运行结果如下:
运行结果

⑤ pow → 乘方

  • 计算一个数的乘方并返回,第一个参数是底数,第二个参数是幂(次数),返回值类型为double。
    pow
    我们分别计算2的平方、3的立方:
//计算2的平方
System.out.println(Math.pow(2,2));
//计算3的立方
System.out.println(Math.pow(3,3));

运行结果如下:
运行结果
我们计算2的倒数:

//计算2的倒数
System.out.println(Math.pow(2,-1));

2的倒数

⑥ sqrt → 平方根

  • 计算一个数的平方根并返回,返回类型为double。
    sqrt

计算256的平凡根,并打印输出:

//计算256的平凡根,并打印输出
System.out.println(Math.sqrt(256));

运行结果如下:
运行结果

⑦ random → 随机数

  • 返回一个double类型的随机小数。
    random
    循环打印10个随机数:
for (int i = 0; i < 10; i++) {
	System.out.println(Math.random());
}

运行结果如下:
运行结果

  • 它的源码如下:
  • 可以看到其底层使用了Random对象和nextDouble,使用Random意味着我们取到的随机数是“伪随机数”,又被破解的可能性,因此它适用于对安全性要求较低的场景。
    random
    random

三、Random

  • Random取出的随机数,因数据足够多,可找到一定规律,我们称之为“伪随机数”。

  • 在使用Random时,需确保当前场景对安全性需求等级较低,否则将造成不必要的损失!

实例化一个Random对象:

Random random  = new Random();

四、SecureRandom

  • SecureRandom取出的随机数,因难以找到规律,所以我们称之为“真随机数”。

  • SecureRandom的安全性是通过操作系统提供的安全的随机种子来生成随机数。这个种子是通过CPU的热噪声、读写磁盘的字节、网络流量等各种随机事件产生的“熵”。

  • 在密码学中,安全的随机数非常重要。如果使用不安全的伪随机数,所有加密体系都将被攻破。

  • 因此,需要使用安全随机数的时候,必须使用SecureRandom,绝不能使用Random!

实例化一个SecureRandom对象:

SecureRandom secureRandom  = new SecureRandom();

五、Random 和 SecureRandom 常用方法:

下面我们介绍其所具有的常用方法,由于两者对方法的调用无较大区别,我们以Random为例,进行演示:

1、nextInt

nextInt

① nextInt()

Random random  = new Random();
for(int i = 0 ; i < 10 ; i++){
	int num = random.nextInt();     //取随机数,并赋值给num
	System.out.println(num);        //打印num
}

运行结果如下,可以看到每次所取的随机数均不同:
运行结果

② nextInt(int bound)

  • 这种调用方式可以确定生成随机整数的范围,参数为范围值(若传入10,则默认返回0~10的随机整数)
  • 若想生成起点不为0,连续范围的随机整数,则可以加上一个起点值:
Random r = new Random();
r.nextInt(bound) + beginValue;

具体应用如下:

Random r = new Random();
//获取10个0~10的随机整数
for (int i = 0; i < 10; i++) {
	System.out.print(r.nextInt(10 )+ "\t");
}
System.out.println("\n---------------------------------------");
//获取10个2~12的随机整数
for (int i = 0; i < 10; i++) {
	System.out.print(2 + r.nextInt(10)+ "\t");	//起点为2
}

运行结果如下:
运行结果

2、nextLong()

Random random  = new Random();
for(int i = 0 ; i < 10 ; i++){
	long num = random.nextLong();     //取随机数,并赋值给num
	System.out.println(num);         //打印num
}

运行结果如下:
在这里插入图片描述

3、nextDouble()

Random random  = new Random();
for(int i = 0 ; i < 10 ; i++){
	double num = random.nextDouble();       //取随机数,并赋值给num
	System.out.println(num); 				//打印num 
}

运行结果如下:
运行结果

4、nextFloat()

Random random  = new Random();
for(int i = 0 ; i < 10 ; i++) {
	double num = random.nextFloat();        //取随机数,并赋值给num
	System.out.println(num);                //打印num
}

运行结果如下:
运行结果

5、nextBoolean()

Random random  = new Random();
for(int i = 0 ; i < 10 ; i++) {
	boolean num = random.nextBoolean();        //取随机数,并赋值给num
	System.out.println(num);                //打印num
}

运行结果如下:
运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值