Java随机数的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java随机数的使用相关的知识,希望对你有一定的参考价值。
在java中实现随机数的类有两种,分别是和java.util.Math 和 java.util.Random
第一种:java.lang.Math.random()
Math.random()方法创建的是[0.0,1.0)范围类的浮点数
示例代码:
int i = 0; System.out.println("Math.random生成随机数!"); while (i < 3) { System.out.println("第" + i + "个数:" + Math.random()); i++; }
控制台输出:
第二种:java.util.Random类
java.util.Random类有两种构造器,分别为Random()和Random(long seed)
两种构造器最主要的区别就在于seed的不同,seed是实现Random类所需的变量,也就是Random类创建所需的种子,Random根据它来生成不同的随机数序列.
Random()用的是默认的seed值,而Random(long seed)实现则是根据输入的seed值来生成对应的随机数序列,
也就是说相同seed的Random对象创建的随机数序列相同.
示例代码:
java.util.Random random1 = new java.util.Random(10); java.util.Random random1_sanmeseed = new java.util.Random(10); java.util.Random random2 = new java.util.Random(); System.out.println("random1:"+random1.nextInt()); System.out.println("random1_sanmeseed:"+random1_sanmeseed.nextInt()); System.out.println("random2:"+random2.nextInt());
控制台输出:
注:使用nextInt测试时要注意使用无参或者参数相同的方法 否则就是random的seed值相同 也会输出不同的随机数.
由此可见在java.util.Random类的适用范围更广泛一些,随后大致讲下它的几个方法,分别是:
nextInt();nextInt(int bound);nextDouble();
nextInt() nextInt(int bound)的不同在于bound 限制了随机数出现的范围,使用后者方法生成的随机数是在[0,bound)之间 不带参数则生成[-2147483648,2147483647]范围内的随机数,也是int的取值范围.
java.util.Random random = new java.util.Random(); for(int i=0;i<10;i++){ System.out.println("带bound参数方法生成的随机数:"+random.nextInt(10)); System.out.println("无参数方法生成的随机数: "+random.nextInt()); }
控制台输出:
nextDouble()方法 返回的随机数和Math.random()返回的随机数范围相同,均为[0,1)之内的随机数,
那么实现[-3,12)范围内的随机小数怎么办呢?(此问题同样适用于nextInt(),nextFloat()等方法)
java.util.Random random = new java.util.Random(); for(int i=0;i<10;i++){ double num = random.nextDouble()*15-3; System.out.println("[-3,12)之间的Double随机数:"+num); }
控制台输出:
以上是关于Java随机数的使用的主要内容,如果未能解决你的问题,请参考以下文章
LockSupport.java 中的 FIFO 互斥代码片段