<强> 1,来源强>
random.nextInt()为java.util。随机类中的方法;
math . random()为. lang。数学类中的静态方法。
<强> 2,用法强>
产生低氮的伪随机数(伪随机数参看最后注解):
//两种生成对象方式:带种子和不带种子(两种方式的区别见注解) 随机随机=new随机(); 整数res=random.nextInt (n),
整数res=(int) (math . random () * n);
<强> 3,jdk源码强>
//random.nextInt (n) 公共int nextInt (int n) { 如果(n & lt;=0) 把新IllegalArgumentException(必须积极“n”); 如果(n,- n)==n)//?n是2的幂 返回(int) ((n *(长)下(31))在祝辞31日); 整数位,val; {做 位=下一个(31); val=% n比特; },(比特- val + (n - 1) & lt;0); 返回val; }
//math . random () 公共静态双重随机(){ 随机rnd=randomNumberGenerator;//第一次调用,生成一个随机数生成器 如果(rnd==null) rnd=initRNG (); 返回rnd.nextDouble (); }//生成的方法为同步的,线程安全 私有静态同步随机initRNG () { 随机rnd=randomNumberGenerator; 返回(rnd==null) & # 63;(随机randomNumberGenerator=new()):研发; }//该方法为随机类中的方法 公共双nextDouble () { 返回(((长)(下一个(26))& lt; & lt;27)+ (27))/(双)(1 l & lt; & lt;53); }
<强> 4,小结强>
-
<李> math . Random()方法生成(0,1)范围内的两类型随机数;随机类中的nextXxxx系列方法生成低氮的随机数;李>
<李> math . random()线程安全、多线程环境能被调用;李>
<李>如无特殊需求,则使用(int) (math . random () * n)的方式生成随机数即可。李>
<强> 5,注:何谓伪随机数强>
伪随机既有规则的随机,随机类中的随机算法就是伪随机。
具体表现为:相同种子数的随机对象生成的随机数序列相同:
@Test 公共空间createProjectNo () { 随机r1=new随机(100); 随机r2=new随机(100); for (int i=0;我& lt;100;我+ +){ System.out.println (r1.nextInt (10) +”、“+ r2.nextInt (10)); } }
结果为:
如不想生成相同的随机数序列,则应只使用一个随机类。而数学类中的随机数生成器randomNumberGenerator对象为静态的,可考虑使用。
<强> 6,注:随机类的两种构造方法区别强>
1,源码
公共随机(){ 这(seedUniquifier () ^ system . nanotime ()); } 公共随机(种子){ 如果(getClass ()==Random.class) 这一点。种子=new AtomicLong (initialScramble(种子)); 其他{//子类重载setSeed 这一点。种子=new AtomicLong (); setSeed(种子); } }
2区别
从源码中可以看的到,未定义种子的构造方法里,使用当前系统时间相关的一个数字作为种子数,该种子数只作为随机算法的起源数字,与生成的随机数区间无关系。
这篇文章是我对Java中随机数的一些简单的理解,如有不对的地方或者其他的见解欢迎指导。
<强>总结强>
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接