数学计算Math类
Math类就属于方法类知识,虽然在实际项目中很少用到,但是总会用到。
那在Java中Math类是干嘛的? Math类在java.lang包中,包含完成基本数学函数所需的方法。
1.操作数据
Math类位于java.lang包中,包含用于执行基本数学运算的方法,Math类的所有方法都是静态方法,所以使用该类中的方法时,可以直接使用类名.方法名,如:Math.round()
;
编号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public static long round(double a) | 静态方法 | 返回四舍五入的整数 |
2 | public static double floor(double a) | 静态方法 | 返回小于参数的最大整数(地板数) |
3 | public static double ceil(double a) | 静态方法 | 返回大于参数的最大整数(天花板数) |
4 | public static double random() | 静态方法 | 返回[0,1)之间随机的浮点数 |
package com.shxt.demo03;
public class Demo01 {
public static void main(String[] args) {
double num = 13.56; // 定义一个double类型的变量
int a = (int)num; //强制类型转换,将double类型强制转换为int类型
System.out.println("强制类型转化:"+a);
long b = Math.round(num); //调用round方法,进行四舍五入
System.out.println("四舍五入:"+b);
double c = Math.floor(num);//地板数
System.out.println("地板数:"+c);
double d = Math.ceil(num);//天花板数
System.out.println("天花板数:"+d);
double e = Math.random(); //返回[0,1)之间随机的浮点数
System.out.println("随机数字[0,1):"+e);
//返回0-99的整数
int f = (int)(Math.random()*99);
System.out.println("随机整数[0,99):"+f);
}
}
/*
运行结果为:
强制类型转化:13
四舍五入:14
地板数:13.0
天花板数:14.0
随机数字[0,1):9.71689600570258E-4
随机整数[0,99):29
*/
复制代码
示例:定义一个包含10个元素的整型数组,通过随机产生10以内的随机数,给数组中的每个元素赋值,并输出结果
package com.shxt.demo03;
public class Demo02 {
public static void main(String[] args) {
int[] nums = new int[10];
for (int i = 0; i < 10; i++) {
nums[i]=(int)(Math.random()*10);
}
for (int num : nums){
System.out.print(num+",");
}
}
}
复制代码
2.三角函数
来源API的解释,自己使用的时候方便查询而已,推荐查看官方API
编号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public static double toDegrees(double angrad) | 静态方法 | 将-π/2到π/2之间的弧度值转化为度 例如: Math.toDegrees(Math.PI/2)结果为90.0; |
2 | public static double toRadians(double angdeg) | 静态方法 | 将度转化为-π/2到π/2之间的弧度值 例如: Math.toRadians(30)结果为 π/6; |
3 | public static double sin(double a) | 静态方法 | 返回角的三角正弦 |
4 | public static double cos(double a) | 静态方法 | 返回角的三角余弦 |
5 | public static double tan(double a) | 静态方法 | 返回角的三角正切 |
6 | public static double asin(double a) | 静态方法 | 返回一个值的反正弦; 返回的角度范围在 -pi/2 到 pi/2 之间 |
7 | public static double acos(double a) | 静态方法 | 返回一个值的反余弦;返回的角度范围在 0.0 到 pi 之间 |
8 | public static double atan(double a) | 静态方法 | 返回一个值的反正切;返回的角度范围在 -pi/2 到 pi/2 之间 |
3.指数函数
编号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public static double exp(double a) | 静态方法 | 获得以e为底a为指数的数值 |
2 | public static double log(double a) | 静态方法 | 对数函数 |
3 | public static double log10(double a) | 静态方法 | 底数为 10 的对数 |
4 | public static double pow(double a, double b) | 静态方法 | a为底b为指数的值 |
5 | public static double sqrt(double a) | 静态方法 | 正平方根 |
4.最大值,最小值,绝对值
编号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public static double max(double a, double b) | 静态方法 | 最大值 |
2 | public static float max(float a, float b) | 静态方法 | 最大值 |
3 | public static int max(int a, int b) | 静态方法 | 最大值 |
4 | public static long max(long a, long b) | 静态方法 | 最大值 |
5 | public static double min(double a, double b) | 静态方法 | 最小值 |
6 | public static float min(float a, float b) | 静态方法 | 最小值 |
7 | public static int min(int a, int b) | 静态方法 | 最小值 |
8 | public static long min(long a, long b) | 静态方法 | 最小值 |
9 | public static double abs(double a) | 静态方法 | 绝对值 |
关于数学计算的Math类,根据实际的需要,查阅API文档才是正道!
随机数Random类
Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同,这点在生成多个随机数字时需要特别注意。
1.Random的构造方法
public Random()
复制代码
该构造方法使用一个和当前系统时间对应的相对时间有关的数字作为种子数,然后使用这个种子数构造Random对象
public Random(long seed)
复制代码
该构造方法可以通过制定一个种子数进行创建
Random r = new Random();
Random r1 = new Random(100);
复制代码
注意:种子数只是随机算法的起源数字和生成的随机数字的区间无关。
2.常用方法
Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率是均等的。
编号 | 方法名称 | 类型 | 描述 |
---|---|---|---|
1 | public boolean nextBoolean() | 普通方法 | 生成一个随机的boolean值, 生成true和false的值几率相等, 也就是都是50%的几率 |
2 | public double nextDouble() | 普通方法 | 生成一个随机的double值,数值介于[0,1.0)之间 |
3 | public int nextInt() | 普通方法 | 生成一个随机的int值,该值介于int的区间, 也就是-231到231-1之间 |
4 | public int nextInt(int n) | 普通方法 | 生成一个随机的int值,该值介于[0,n)的区间, 也就是0到n之间的随机int值 |
5 | public void setSeed(long seed) | 普通方法 | 重新设置Random对象中的种子数 |
package com.shxt.demo04;
import java.util.Random;
public class Demo01 {
public static void main(String[] args) {
Random random = new Random();
double num1 = random.nextDouble();
System.out.println("生成[0,1.0)区间的小数:"+num1);
//生成[0,10.0)区间的小数:将该区间扩大10倍即是要求的区间
double num2 = random.nextDouble()*10;
System.out.println("生成[0,10.0)区间的小数:"+num2);
//生成[1,5.5)区间的小数:只需要首先生成[0,5.5)区间的随机数字,然后将生成的随机数区间加1即可
double num3 = random.nextDouble()*5.5+1;
System.out.println("生成[1,5.5)区间的小数:"+num3);
//生成任意整数:直接使用nextInt方法即可
int num4 = random.nextInt();
System.out.println("生成任意的整数:"+num4);
//生成[0,100)区间的整数
int num5 = random.nextInt(100);
System.out.println("生成[0,100)区间的整数:"+num5);
//生成[-100,100)区间的整数
int num6 = random.nextInt(200)-100;
System.out.println("生成[-100,100)区间的整数:"+num6);
}
}
复制代码