在java中,主要有三种获得随机数的方法:
1、Math.random();这个方法生成的是0~1之间的一个double;
2、java.util的Random类,创建该类的对象来产生随机数(int、float、double、long)
3、System类中的currentTimeMillis()方法,该方法返回一个long类型的毫秒数(1970年1月1日0时0分0秒到目前的一个毫秒数),可以作为随机数;
自己写一个生成随机数的方法
/**
* @ClassName TestDemo13
* @Description 随机数
* @Author lzq
* @Date 2018/11/30 21:08
* @Version 1.0
**/
public class TestDemo13 {
public static void main(String[] args) {
double[] r = {15152}; //随便给一个
//要10个随机数 [5,12]之间
for(int i = 0;i < 10;i++) {
System.out.printf("%10.2f\n",5+7*seed(r));
}
System.out.println("====================");
//要10个正态分布的随机数 均值为2 方差 = 3.5^2
for(int i = 0;i < 10;i++) {
System.out.printf("%10.2f\n",normality(2,3.5,r));
}
}
/**
* 生成随机数的方法 产生(0--1)之间的随机数据
* 要想生成[m,n]之间的随机数 ---->m+(n-m)seed(r)
* 要想生成[m,n]之间均匀分布的随机数 ---->m+(int)(n-m)seed(r)
*
* @param random 这是只有一个元素的double型数组,因为数组是引用类型,方法里面
* 把它值改了实参也就变了,还可以定义一个属于类的static静态变量来实现也是一样的
* @return
*/
public static double seed(double[] random) {
double base,u,v,p,temp1,temp2,temp3;
base = 256.0; //基数
u = 17.0;
v = 139.0; //17*5+139
temp1 = u*(random[0])+v; //计算总值
temp2 = (int)(temp1/base); //计算商 记得强转,不然就没余数了
temp3 = temp1-temp2*base; //计算余数
random[0] = temp3; //更新随机种子,方便下一次生成随机数
p = random[0]/base;
return p;
}
/**
* 生成正态分布的随机数
* @param u 正态分布均值
* @param t 正态分布方差
* @param random
* @return
*/
public static double normality(double u,double t,double[] random) {
double total = 0.0,result;
for(int i = 0;i < 15;i++) { //随便循环足够大的次数就可以了
total += seed(random);
}
result = u+t*(total-6.0); //生成随机数
return result;
}
}
10.11
11.73
11.15
8.39
10.44
10.30
7.98
10.47
10.77
8.88
====================
10.67
1.41
7.25
7.18
8.21
6.83
10.04
3.85
5.75
1.74