JAVA随机数的产生
产生随机数的类和方法
Random random=new Random();
//Random(long seed):使用单个 long 类型的参数创建一个新的随机数生成器。
random.nextBoolean();
random.nextDouble(); //返回0~1.0之间的浮点数
random.nextInt();
random.nextInt(int n); //返回0~n-1的随机数
random.setSeed(long seed);//重新设置种子数
random.nextLong();
random.nextFloat();
random.nextDouble();
random.nextInt(max-min+1)+min //得到min~max-1的随机数
//一般随机数的范围都是左闭右开
ThreadLocalRandom random=new ThreadLocalRandom();
SecureRandom random=SecureRandom.getInstance("事件作为种子");
Math.random(); //产生0~1的随机浮点数
(int)Math.random()*length; //产生整数随机数
生成随机数的两种方法
平方取中法
给出一个2s位的随机种子,然后平方得到4s位的数字,取数字的中间2s位得到随机数,然后作为新的随机种子得到下一位随机数
例如:2333(不够2s补0) -> 05442889(不够4s补零) -> 4428
线性同余法产生随机数
线性同余方法(LCG)是一种产生伪随机数的方法。
它是根据递归公式:RandSeed = (A * RandSeed + B) % M
线性同余法最重要的是定义了三个整数,乘数 A、增量 B和模数 M,其中A, B, M是产生器设定的常数。 LCG的周期最大为 M,但大部分情况都会少于M。要令LCG达到最大周期,应符合以下条件:
- B,M互质;
- M的所有质因数都能整除A-1;
- 若M是4的倍数,A-1也是;
- A,B,N[0]都比M小;
- A,B是正整数。