zoukankan      html  css  js  c++  java
  • java的三种随机数生成方式

     

      随机数的产生在一些代码中很常用,也是我们必须要掌握的。而java中产生随机数的方法主要有三种:

        第一种:new Random()

        第二种:Math.random()

        第三种:currentTimeMillis()

      第一种需要借助java.util.Random类来产生一个随机数发生器,也是最常用的一种,构造函数有两个,Random()和Random(long seed)。第一个就是以当前时间为默认种子,第二个是以指定的种子值进行。产生之后,借助不同的语句产生不同类型的数。

      种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关。以代码为例。

    复制代码
    1 public static void main(String[] args)
    2 {    
    3   Random r = new Random(1);
    4   for(int i=0 ; i<5 ;  i++)
    5   {
    6     int ran1 = r.nextInt(100);
    7     System.out.println(ran1);
    8   }
    9 }
    复制代码

    在我的编译器下产生的五个数均为85,88,47,13,54,如果采用Random r = new Random(),产生的随机数就不同,这就是确定种子导致的结果。

      而第二种方法返回的数值是[0.0,1.0)的double型数值,由于double类数的精度很高,可以在一定程度下看做随机数,借助(int)来进行类型转换就可以得到整数随机数了,代码如下。

    1     public static void main(String[] args)
    2     {    
    3         int max=100,min=1;
    4         int ran2 = (int) (Math.random()*(max-min)+min); 
    5         System.out.println(ran2);
    6     }

      至于第三种方法虽然不常用,但是也是一种思路。方法返回从1970年1月1日0时0分0秒(这与UNIX系统有关)到现在的一个long型的毫秒数,取模之后即可得到所需范围内的随机数。

    复制代码
    1     public static void main(String[] args)
    2     {    
    3         int max=100,min=1;
    4         long randomNum = System.currentTimeMillis();  
    5         int ran3 = (int) (randomNum%(max-min)+min);  
    6         System.out.println(ran3);
    7         
    8     }
    复制代码

    https://blog.csdn.net/chennai1101/article/details/84976014

    //java代码:生成一个从x到y之间的随机数(整数)
    import java.util.Random;
     
    /**
     * 一、思路:
     * 1、生成随机数需要使用到Java工具类中的Random类。
     * 2、要求是随机x到y之间的整数,即指定范围,则使用Random类中的nextInt(int n)方法。
     * 3、该方法生成从0(包括)到n(不包括)之间的随机整数,是一个伪随机数,并不是真正的随机数。
     * 4、若x不为0,则需要在随机结果后加上x。参数n的值也需要加上1后减去x。最后结果才符合要求的范围。
     * 二、实现:
     * 1、定义x和y的值,修改该值可以随机不同范围的整数。
     * 2、调用Random中的nextInt(int n)方法,计算随机数。
     * 3、将结果打印到控制台。
     * */
    public class RandomTest {
     
        public static final int START = 50;   //定义范围开始数字
         
        public static final int END = 99; //定义范围结束数字
         
        public static void main(String[] args) {
            // TODO Auto-generated method stub
             
            //创建Random类对象
            Random random = new Random();              
             
            //产生随机数
            int number = random.nextInt(END - START + 1) + START;
             
            //打印随机数
            System.out.println("产生一个"+START+"到"+END+"之间的随机整数:"+number);
             
        }
     
    }
    

      

     
    分类: Java
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/11926100.html
Copyright © 2011-2022 走看看