java中random⽅法取值范围_详解JAVA中Random()函数的
⽤法
有时候,我们会⽤到随机数。java中⾃带的Random()函数让我们可以很⽅便的产⽣随机数。本⽂介绍它的⼀些⽤法。
随机数是专门的随机试验的结果。在统计学的不同技术中需要使⽤随机数,⽐如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的试验组的过程中,或者在进⾏蒙特卡罗模拟法计算的时候等等。
产⽣随机数有多种不同的⽅法。这些⽅法被称为随机数发⽣器。随机数最重要的特性是:它所产⽣的后⾯的那个数与前⾯的那个数毫⽆关系。
Java中存在着两种Random函数:java.lang.Math.Random和java.util.Random。
java.lang.Math.Random
调⽤这个Math.Random()函数能够返回带正号的double值,该值⼤于等于0.0且⼩于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是⼀个伪随机选择的数,在该范围内(近似)均匀分布。例⼦如下:package xttblog;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
// 结果是个double类型的值,区间为[0.0,1.0)
System.out.println("Math.random()=" + Math.random());
// 注意不要写成(int)Math.random()*3,这个结果为0,因为先执⾏了强制转换
int num = (int) (Math.random() * 3);
System.out.println("num=" + num);
/**
* 输出结果为:
* Math.random()=0.02909671613289655
* num=0
*/
}
}
java.util.Random
下⾯Random()的两种构造⽅法:Random():创建⼀个新的随机数⽣成器。
Random(long seed):使⽤单个 long 种⼦创建⼀个新的随机数⽣成器。
我们可以在构造Random对象的时候指定种⼦(这⾥指定种⼦有何作⽤,请接着往下看),如:Random r1 = new Random(20);
或者默认当前系统时间的毫秒数作为种⼦数:Random r1 = new Random();
需要说明的是:你在创建⼀个Random对象的时候可以给定任意⼀个合法的种⼦数,种⼦数只是随机算法的起源数字,和⽣成的随机数的区间没有任何关系。如下⾯的Java代码:Random rand =new Ra
ndom(25);
int i;
Int(100);
初始化时25并没有起直接作⽤(注意:不是没有起作⽤),Int(100);中的100是随机数的上限,产⽣的随机数为0-100的整数,不包括100。
具体⽤法如下例:package xttblog;
import java.util.ArrayList;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
// 案例2
// 对于种⼦相同的Random对象,⽣成的随机数序列是⼀样的。
Random ran1 = new Random(10);
System.out.println("使⽤种⼦为10的Random对象⽣成[0,10)内随机整数序列: ");
for (int i = 0; i
System.out.Int(10) + " ");
}
System.out.println();
Random ran2 = new Random(10);
System.out.println("使⽤另⼀个种⼦为10的Random对象⽣成[0,10)内随机整数序列: ");
for (int i = 0; i
System.out.Int(10) + " ");
}
/
**
* 输出结果为:
*
* 使⽤种⼦为10的Random对象⽣成[0,10)内随机整数序列:
* 3 0 3 0 6 6 7 8 1 4
* 使⽤另⼀个种⼦为10的Random对象⽣成[0,10)内随机整数序列:
* 3 0 3 0 6 6 7 8 1 4
*
*/
// 案例3
// 在没带参数构造函数⽣成的Random对象的种⼦缺省是当前系统时间的毫秒数。
Random r3 = new Random();
System.out.println();
System.out.println("使⽤种⼦缺省是当前系统时间的毫秒数的Random对象⽣成[0,10)内随机整数序列");
for (int i = 0; i
System.out.Int(10)+" ");
}
/**
* 输出结果为:
*
* 使⽤种⼦缺省是当前系统时间的毫秒数的Random对象⽣成[0,10)内随机整数序列
* 1 1 0 4 4 2 3 8 8 4
*
*/
// 另外,直接使⽤Random⽆法避免⽣成重复的数字,如果需要⽣成不重复的随机数序列,需要借助数组和集合类ArrayList list=new TestRandom().getDiffNO(10);
System.out.println();
System.out.println("产⽣的n个不同的随机数:"+list);
}
/**
* ⽣成n个不同的随机数,且随机数区间为[0,10)
* @param n
* @return
*/
public ArrayList getDiffNO(int n){
// ⽣成 [0-n) 个不重复的随机数
// list ⽤来保存这些随机数
ArrayList list = new ArrayList();
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
for (int i = 0; i
do {
// 如果产⽣的数相同继续循环
num = Int(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}
return list;
}
}
下⾯是Java.util.Random()⽅法摘要:protected int next(int bits):⽣成下⼀个伪随机数。
boolean nextBoolean():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的均匀分布的boolean值。
void nextBytes(byte[] bytes):⽣成随机字节并将其置于⽤户提供的 byte 数组中。
double nextDouble():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在0.0和1.0之间均匀分布的 double值。
float nextFloat():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在0.0和1.0之间均匀分布float值。
double nextGaussian():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、呈⾼斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
int nextInt():返回下⼀个伪随机数,它是此随机数⽣成器的序列中均匀分布的 int 值。
int nextInt(int n):返回⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
long nextLong():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的均匀分布的 long 值。
void setSeed(long seed):使⽤单个 long 种⼦设置此随机数⽣成器的种⼦。
下⾯给⼏个例⼦:⽣成[0,1.0)区间的⼩数:double d1 = r.nextDouble();
⽣成[0,5.0)区间的⼩数:double d2 = r.nextDouble() * 5;
⽣成[1,2.5)区间的⼩数:double d3 = r.nextDouble() * 1.5 + 1;
java生成随机数的方法⽣成-231到231-1之间的整数:int n = r.nextInt();
⽣成[0,10)区间的整数:int n2 = r.nextInt(10);//⽅法⼀
n2 = Math.Int() % 10);//⽅法⼆
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论