JAVA中的Random()函数,获取随机数
Java中存在着两种Random函数:
⼀、java.lang.Math.Random;
调⽤这个Math.Random()函数能够返回带正号的double值,该值⼤于等于0.0且⼩于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是⼀个伪随机选择的数,在该范围内(近似)均匀分布。例⼦如下:
package IO;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
// 案例1
System.out.println("Math.random()=" + Math.random());// 结果是个double类型的值,区间为[0.0,1.0)
int num = (int) (Math.random() * 3); // 注意不要写成(int)Math.random()*3,这个结果为0,因为先执⾏了强制转换
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 Random(25);
int i;
Int(100);
初始化时25并没有起直接作⽤(注意:不是没有起作⽤),Int(100);中的100是随机数的上限,产⽣的随机数为0-100的整数,不包括100。
具体⽤法如下例:
package IO;
import java.util.ArrayList;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
// 案例2
// 对于种⼦相同的Random对象,⽣成的随机数序列是⼀样的。
// 对于种⼦相同的Random对象,⽣成的随机数序列是⼀样的。
Random ran1 = new Random(10);
System.out.println("使⽤种⼦为10的Random对象⽣成[0,10)内随机整数序列: ");
java生成随机数的方法for (int i = 0; i < 10; 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 < 10; 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 < 10; 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 < n; i++) {
do {
// 如果产⽣的数相同继续循环
num = Int(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}
return list;
}
}
备注:下⾯是Java.util.Random()⽅法摘要:
1. protected int next(int bits):⽣成下⼀个伪随机数。
2. boolean nextBoolean():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的均匀分布的boolean值。
3. void nextBytes(byte[] bytes):⽣成随机字节并将其置于⽤户提供的 byte 数组中。
4. double nextDouble():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在0.0和1.0之间均匀分布的 double值。
5. float nextFloat():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在0.0和1.0之间均匀分布float值。
6. double nextGaussian():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的、呈⾼斯(“正态”)分布的double值,其平均值是0.0标准差是1.0。
7. int nextInt():返回下⼀个伪随机数,它是此随机数⽣成器的序列中均匀分布的 int 值。
8. int nextInt(int n):返回⼀个伪随机数,它是取⾃此随机数⽣成器序列的、在(包括和指定值(不包括)之间均匀分布的int值。
9. long nextLong():返回下⼀个伪随机数,它是取⾃此随机数⽣成器序列的均匀分布的 long 值。
10. void setSeed(long seed):使⽤单个 long 种⼦设置此随机数⽣成器的种⼦。
下⾯给⼏个例⼦:
1. ⽣成[0,1.0)区间的⼩数:double d1 = r.nextDouble();
2. ⽣成[0,5.0)区间的⼩数:double d2 = r.nextDouble() * 5;
3. ⽣成[1,2.5)区间的⼩数:double d3 = r.nextDouble() * 1.5 + 1;
4. ⽣成-231到231-1之间的整数:int n = r.nextInt();
5. ⽣成[0,10)区间的整数:
int n2 = r.nextInt(10);//⽅法⼀
n2 = Math.Int() % 10);//⽅法⼆
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论