最近在研究java的随机数,得到小小的成果。
1、java.util.Random
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
如果,有两个数,都是是用random(),即:
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
// TODO Auto-generated method stub
Random r1 = new Random(22);
int i1 = r1.nextInt(20);
System.out.println("r1 = " + r1);
System.out.println(i1);
Random r2 = new Random(22);
int i2 = r2.nextInt(20);
System.out.println("r2 = " + r2);
System.out.println(i2);
}
}
即:Random(22),括号里的相同,则,输入的r1和r2也一定相同,而如果Random里面的参数是缺省的,则r1和r2的值就不一定相同了。
2、java.lang.math.random
这种随机数,就是默认在0.0到1.0中获取的。如:
System.out.println(Math.random());
返回的是一个double类型的数,如果要控制不同的范围,用Math.random()*r(范围数)即可。
附录:
备注:下面是Java.util.Random()方法摘要:
- protected int next(int bits):生成下一个伪随机数。
- boolean nextBoolean():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。
- void nextBytes(byte[] bytes):生成随机字节并将其置于用户提供的 byte 数组中。
- double nextDouble():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的 double值。
- float nextFloat():返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布float值。
- double nextGaussian():返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
- int nextInt():返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
- int nextInt(int n):返回一个伪随机数,它是取自此随机数生成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
- long nextLong():返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
- void setSeed(long seed):使用单个 long 种子设置此随机数生成器的种子。
下面给几个例子:
- 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
- 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
- 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
- 生成-231到231-1之间的整数:int n = r.nextInt();
- 生成[0,10)区间的整数:
int n2 = r.nextInt(10);//方法一
n2 = Math.abs(r.nextInt() % 10);//方法二
参考资料:http://www.cnblogs.com/ningvsban/p/3590722.html