1.java.util.Math
java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作。
Math常用静态方法和常量如下:
| 方法名字 | 说明 |
|---|---|
| abs | 求绝对值 |
| max | 求最大值 |
| min | 求最小值 |
| sqrt | 求平方根 |
| pow(a,b) | 求以a为底的b次方 |
| Math.PI | 圆周率常量 |
| Math.E | 自然对数常量 |
| round(n) | n+0.5后向下取整 |
| random | 生成随机数,0 <= 随机数 < 1 |
通过一个实例理解以上方法。
System.out.println(Math.abs(-10));
System.out.println(Math.max(10, 13));
System.out.println(Math.min(3.14, 3.1415));
System.out.println(Math.sqrt(100));
System.out.println(Math.pow(2, 10));
System.out.println(Math.round(-4.5));
System.out.println(Math.PI);
System.out.println(Math.E);
System.out.println(Math.random());
运行结果:
10
13
3.14
10.0
1024.0
-4
3.141592653589793
2.718281828459045
0.2459411434915556
2.如何生成随机数
1)使用Math.random() 例如:生成10个1-33之间的随机数。
for(int i=0;i<10;i++){
System.out.println((int) (Math.random() * 100) % 33 + 1);
}
运行结果:
29
15
25
9
6
13
17
1
7
13
2)使用Random随机数类
例如:生成10个1-33之间的随机数。
Random r = new Random(); //生成随机数对象
for(int i=0;i<10;i++){
//r.nextInt(int bound); 规定生成的随机数的上界。即范围在0-32之间。
System.out.println(r.nextInt(33) + 1);
}
运行结果:
9
14
28
21
16
32
19
5
3
3
3)使用SecureRandom
我们知道,Random类中实现的随机算法是伪随机,也就是有规则的随机。在进行随机时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。相同种子数的Random对象,相同次数生成的随机数字是完全相同的。也就是说,两个种子数相同的Random对象,生成的随机数字完全相同。所以在需要频繁生成随机数,或者安全要求较高的时候,不要使用Random,因为其生成的值其实是可以预测的。
SecureRandom类提供加密的强随机数生成器 (RNG),SecureRandom内置两种随机数算法,NativePRNG和SHA1PRNG。
我们可以使用new和getInstance来获得一个SecureRandom对象。
SecureRandom secureRandom1 = new SecureRandom();
SecureRandom secureRandom2 = SecureRandom.getInstance("SHA1PRNG");//SHA1PRNG参数是算法的名字
生成10个1-33之间的随机数。
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
for(int i=0;i<10;i++){
System.out.println(secureRandom.nextInt(33) + 1);
}
运行结果:
23
22
11
24
9
15
8
2
9
2
也可以使用nextBytes(byte[] bytes)和generateSeed(int numBytes)方法获得一个随机的byte数组,这个数组中的数通常可以用来做其他随机生成器的种子。