Java中存在着两种Random函数:
一、java.lang.Math.Random;
调用这个Math.Random()函数能够返回带正号的double值,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。例子如下:
package test7;
/**
* Math.random 返回的结果是一个double类型
*/
public class TestDoWhile {
public static void main(String[] args) {
int i = 0;
while(i<=1) {
double random = Math.random();//生成一个0.00到1.00之间的小数
System.out.println(random);
i++;
}
}
}
// 输出结果:0.2712203924820884
// 0.956275463293749
二、java.util.Random
下面Random()的两种构造方法:
Random():创建一个新的随机数生成器。
Random(long seed):使用单个 long 种子创建一个新的随机数生成器。
package test7;
import java.util.Random;
/***
* //种子数相同的情况下,生成的随机数相同,即使输出的个数不同
*
* //没有种子,那么每次刷新生成的随机数都不相同
* @author 184527
*
*/
public class TestDoWhile {
public static void main(String[] args) {
Random ran1 = new Random(10);//种子数为10
System.out.println("使用种子1为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 5; i++) {
System.out.print(ran1.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
}
// 使用种子1为10的Random对象生成[0,10)内随机整数序列:
// 3 0 3 0 6
System.out.println("");
//==================================================================
Random ran2 = new Random(10);//种子数为10
System.out.println("使用种子2为10的Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran2.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
}
// 使用种子2为10的Random对象生成[0,10)内随机整数序列:
// 3 0 3 0 6 6 7 8 1 4
System.out.println("");
//==================================================================
// 无种子数,所以每次刷新生成的随机数都不尽相同
Random ran3 = new Random();//种子数为10
System.out.println("Random对象生成[0,10)内随机整数序列: ");
for (int i = 0; i < 10; i++) {
System.out.print(ran2.nextInt(10) + " ");//nextInt(10)在此表示生成的随机数【小于10】
}
// Random对象生成[0,10)内随机整数序列:
// 3 9 1 8 5 0 6 3 3 8
}
}
直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类
package test7;
import java.util.ArrayList;
import java.util.Random;
public class TestDoWhile {
public static void main(String[] args) {
// 另外,直接使用Random无法避免生成重复的数字,如果需要生成不重复的随机数序列,需要借助数组和集合类
ArrayList list = new TestDoWhile().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 = rand.nextInt(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}
return list;
}
}