J2SE基础夯实系列之随机数产生方法小知识点

来源:互联网 发布:mac 所有软件打不开 编辑:程序博客网 时间:2024/04/29 08:21

产生随机数的时候,避免使用nextInt()方法,尽量使用nextInt(int n)方法

如果想要产生位于0和某个上界之间的随机整数,用next()方法的话,代码如下:


[java] view plaincopyprint?
  1. Random r = new Random();  
  2. public int random(int n) {  
  3. return Math.abs(r.nextInt())%n  
  4.   
  5. }  



因为,对于nextInt()方法来说,产生的数是随机的,但是有如下三个缺点:

a:如果n是一个比较小的 n的乘方,比较短的周期后,它产生的随机书序列将会重复。

b:如果n不是2的平方,平均起来,它产生的数字并不是均匀分布的,有的数字出现的频率比较高。

c:第三个缺点是,这个程序有时候可能会产生灾难性后果。如下面的程序:


[java] view plaincopyprint?
  1. public class TestIterator {  
  2.     public static void main(String[] args) {  
  3.         System.out.println(Math.abs(Integer.MIN_VALUE)%23);  
  4.     }  
  5. }  

产生的结果是-6.


再看下面:


[java] view plaincopyprint?
  1. public class TestIterator {  
  2.     public static void main(String[] args) {  
  3.         System.out.println(Math.abs(Integer.MIN_VALUE)%23);  
  4.         System.out.println(Integer.MIN_VALUE);  
  5.         System.out.println(Math.abs(Integer.MIN_VALUE));  
  6.     }  
  7. }  

abs函数,对于
[java] view plaincopyprint?
  1. Integer.MIN_VALUE  
返回的还是它本身。


所以,这里容易出问题。

那么用nextInt(int n)方法就可以避免上面那些缺点。