zoukankan      html  css  js  c++  java
  • 随机数产生方法小知识点

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


    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:第三个缺点是,这个程序有时候可能会产生灾难性后果。如下面的程序:


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


    产生的结果是-6.


    再看下面:


    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函数,对于

    1. Integer.MIN_VALUE  

    返回的还是它本身。


    所以,这里容易出问题。

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

  • 相关阅读:
    【C++基础】重载,覆盖,隐藏
    【Lintcode】003.Digit Counts
    【C++ Primer 5th】Chapter 15
    【Lintcode】120.Word Ladder
    牛客网上的题
    二叉树中和为某个值得路径
    数据库
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
    二叉树的镜像
  • 原文地址:https://www.cnblogs.com/allenzhaox/p/3201819.html
Copyright © 2011-2022 走看看