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达到最大周期,应符合以下条件:

  1. B,M互质;
  2. M的所有质因数都能整除A-1;
  3. 若M是4的倍数,A-1也是;
  4. A,B,N[0]都比M小;
  5. A,B是正整数。

 

posted @ 2022-11-16 12:35  突破铁皮  阅读(767)  评论(0编辑  收藏  举报