数学操作类
一.Math
1.属性
- static double
E double 值比任何其他值更接近于 e,即自然对数的底数。 - static double
PI double 值比任何其他值更接近圆的周长与直径之比 pi。
@Test
void test() {
System.out.println(Math.PI);//3.141592653589793
System.out.println(Math.E);//2.718281828459045
//将PI变成3.14
String valueOf = String.valueOf(Math.PI).substring(0,4);
Double valueOf2 = Double.valueOf(valueOf);
System.out.println(valueOf2);//3.14
}
2.常用方法
- static double
abs(double a) 返回 double 值的绝对值。 - static double
cbrt(double a) 返回 double 值的立方根。 - static double
ceil(double a) 返回最小的(最接近负无穷大)double 值,该值大于或等于参数,并且等于某个整数。 - static double
exp(double a) 返回欧拉数 e 的 double 次幂的值。 - static double
expm1(double x) 返回 ex -1。 - static double
floor(double a) 返回最大的(最接近正无穷大)double 值,该值小于或等于参数,并且等于某个整数。 - static double
log(double a) 返回(底数是 e)double 值的自然对数。 - static double
max(double a, double b) 返回两个 double 值中较大的一个。 - static double
min(double a, double b) 返回两个 double 值中较小的一个。 - static double
pow(double a, double b) 返回第一个参数的第二个参数次幂的值。 - static double
random() 返回带正号的 double 值,大于或等于 0.0,小于 1.0。 - static double
sin(double a) 返回角的三角正弦。 - static double
cos(double a) 返回角的三角余弦。 - static double
toRadians(double angdeg) 将用度数测量的角转换为近似相等的用弧度测量的角。
//常用方法
@Test
void test01() {
System.out.println(Math.E);//底数2.718281828459045
Byte b=-10;
Byte b1=new Byte((byte)10);
System.out.println("b的绝对值:"+Math.abs(b));//b的绝对值:10
System.out.println("1000的三次方根:"+Math.cbrt(1000));//1000的三次方根:10.0
System.out.println("10.4的最大整数:"+Math.ceil(10.4));//10.4的最大整数:11.0
System.out.println("-10.5的最大整数:"+Math.ceil(-10.5));//-10.5的最大整数:-10.0
System.out.println("18.5的最小整数:"+Math.floor(18.5));//18.5的最小整数:18.0
System.out.println("-15.5的最大整数:"+Math.floor(-15.5));//-15.5的最大整数:-16.0
System.out.println("e的2次幂的值:"+Math.exp(2));//e的2次幂的值:7.38905609893065
System.out.println("e的2次幂的值-1:"+Math.expm1(2));//e的2次幂的值-1:6.38905609893065
System.out.println("e的自然对数:"+Math.log(Math.exp(2)));//e的自然对数:2.0
System.out.println("最大值:"+Math.max(100, 200));//最大值:200
System.out.println("最小值:"+Math.min(100, 200));//最小值:100
System.out.println("10的2次幂值 :"+Math.pow(10, 2));//10的2次幂值 :100.0
System.out.println("随机数字 0.0--1.0:"+(Math.random()));//随机数字 0.0--1.0:0.7148606323615798
System.out.println("随机数字 0--10:"+(int)(Math.random()*10));//随机数字 0--10:2
System.out.println("随机数字1--10:"+(int)(Math.random()*10+1));//随机数字1--10:1
// 三角函数主要参数是用弧度测量的角
System.out.println("30正弦:"+Math.sin(Math.toRadians(30)));//30正弦:0.49999999999999994
System.out.println("60余弦:"+Math.cos(Math.toRadians(60)));//60余弦:0.5000000000000001
}
二.random
1.构造方法
- Random() 创建一个新的随机数生成器。
- Random(long seed) 使用单个 long 种子创建一个新随机数生成器: public Random(long seed) { setSeed(seed); } next 方法使用它来保存随机数生成器的状态。
2.常用方法
- boolean
nextBoolean() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 boolean 值。 - void
nextBytes(byte[] bytes) 生成随机字节并将其置于用户提供的字节数组中。 - double
nextDouble() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0之间均匀分布的 double 值。 - float
nextFloat() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、在 0.0 和 1.0 之间均匀分布的 float 值。 - int
nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 - int
nextInt(int n) 返回一个伪随机数,它是从此随机数生成器的序列中取出的、在 0(包括)和指定值(不包括)之间均匀分布的 int值。 - long
nextLong() 返回下一个伪随机数,它是从此随机数生成器的序列中取出的、均匀分布的 long 值。
// Random类
@Test
void test02() {
Random random=new Random();
//获取随机数
//获取所有int类型的范围值
System.out.println(random.nextInt());//813393314
//获取所有boolean类型的范围值
System.out.println(random.nextBoolean());//false
//获取所有float类型的范围值
System.out.println(random.nextFloat());//0.5209568
//获取所有double类型的范围值
System.out.println(random.nextDouble());//0.9409616028541373
for (int i = 0; i < 10; i++) {
//获取0--指定正数间的随机数
System.out.print(random.nextInt(10));//1666920470
}
// 将得到的随机数方法指定的byte数组中
byte[] b=new byte[10];
random.nextBytes(b);
System.out.println(b[0]);//39
}
- 使用Random生成一个随机数字,根据随机数字作为下标,去数组中获取数据
@Test
void test03() {
//创建数组,保存信息
String [] stu=new String[] {"zs-18","ls-17","ww-20","as-11"};
//获取随机数
Random random=new Random();//默认随机数生成器
int nextInt = random.nextInt(stu.length);
System.out.println(stu[nextInt]);//as-11
}
- 使用同一个种子作为随机数的生成器
@Test
void test04() {
Random random=new Random(200);
Random random01=new Random(200);
System.out.println(random.nextInt(10));//9
System.out.println(random01.nextInt(10));//9
System.out.println(random.nextInt(10));//1
System.out.println(random01.nextInt(10));//1
}
总结 :
Math是用来对数字及三角函数进行操作,所以方法都是静态的 。
Random 主要是用来获取随机数的,如果使用种子,多个不同随机数生成器可能会得到相同的随机数。
数组操作类 Arrays
一.填充
- static void
fill(Object[] a, int fromIndex, int toIndex, Object val) 将指定的 Object 引用分配给指定 Object 数组指定范围中的每个元素。 - static void
fill(Object[] a, Object val) 将指定的 Object 引用分配给指定 Object 数组的每个元素。
// 填充/替换
@Test
void test() {
int [] nums=new int[] {10,41,25,47,3,9};
//将nums中的所有元素替换
Arrays.fill(nums, 100);
System.out.println(Arrays.toString(nums));//[100, 100, 100, 100, 100, 100]
// 替换部分元素值
//a:要操作的数组;fromIndex:起始下标;toIndex:结束下标; val:值
Arrays.fill(nums, 0, 3, 11);
System.out.println(Arrays.toString(nums));//[11, 11, 11, 100, 100, 100]
}
二.排序
- static void
sort(Object[] a) 根据元素的自然顺序,对指定对象数组按升序进行排序。 - static void
sort(Object[] a, int fromIndex, int toIndex) 根据元素的自然顺序,对指定对象数组的指定范围按升序进行排序。
//排序的底层是冒泡排序
@Test
void test01() {
int [] nums=new int[] {10,41,25,47,3,9};
Arrays.sort(nums);
System.out.println("排序后"+Arrays.toString(nums));//排序后[3, 9, 10, 25, 41, 47]
int [] num=new int[] {10,41,25,47,3,9};
Arrays.sort(num,0,2);
System.out.println("排序后"+Arrays.toString(num));//排序后[10, 41, 25, 47, 3, 9]
//反向输出
for (int i = nums.length-1; i >=0; i--) {
System.out.print(nums[i]);//4741251093
}
}
三.查询
- static int
binarySearch(Object[] a, Object key) 使用二进制搜索算法来搜索指定数组,以获得指定对象。
- 使用binarySearch(Object[] a, Object key)方法一定要先进行排序
//查询
@Test
void test02() {
int [] nums=new int[] {10,41,25,47,3,9};
//以前通过for循环来查找
for (int i : nums) {
if(i==25) {
System.out.println(i);//25
}
}
//使用binarySearch方法一定要先进行排序
Arrays.sort(nums);
//返回值是找到的元素下标(第一个出现的下标 )
int search = Arrays.binarySearch(nums, 41);
System.out.println(search);//4
}
四.复制
- static String
toString(Object[] a) 返回指定数组内容的字符串表示形式。 - static void (System的方法)
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
- src - 源数组。
- srcPos - 源数组中的起始位置。
- dest - 目标数组。
- destPos - 目标数据中的起始位置。
- length - 要复制的数组元素的数量。
- static int[]
**copyOf(int[] original, int newLength) (JDK1.6以后)**复制指定的数组,截断或填充零(如果必要)所以副本具有指定的长度。
- original -数组被复制
- newLength -要返回的副本的长度
//复制
@Test
void test03() {
int [] nums=new int[] {10,41,25,47,3,9};
int [] newNums=new int[6];
System.arraycopy(nums,0,newNums,0,6);
System.out.println(Arrays.toString(newNums));//[10, 41, 25, 47, 3, 9]
// 自动得到一个新的数组,length:原数组从第一个元素开始要几个
int[] copyOf = Arrays.copyOf(nums, 3);
System.out.println(Arrays.toString(copyOf));//[10, 41, 25]
}
五.比较
- 比较的是数组中的元素值,元素一样,数组就相等
- static boolean
equals(Object[] a, Object[] a2) 如果两个指定的 Objects 数组彼此相等,则返回 true。
@Test
void test04() {
int [] nums=new int[] {10,41,25,47,3,9};
int [] newNums=new int[6];
int [] nums01=new int[] {10,41,25,47,3,9};
int [] nums02=new int[] {10,47,3,9};
System.out.println(Arrays.equals(nums, newNums));//false
System.out.println(Arrays.equals(nums, nums01));//true
System.out.println(Arrays.equals(nums, nums02));//false
}