原文链接:
https://blog.csdn.net/qy20115549/article/details/79635945
我在原文的基础是修改了部分代码。
public class Main {
public static double[] multiPros;
public static void main(String[] args) {
multiPros = new double[4];
multiPros[0] = 0.14;
multiPros[1] = 0.49;
multiPros[2] = 0.06;
multiPros[3] = 0.31;
for (int i = 0; i < 10; i++) {
double[] num = new double[5];
num = nextDisrete(multiPros);
if (num[0] == 0) {
System.out.println("随机生成的数字所在的范围在:0" + "————" + multiPros[0]);
} else {
double flag1 = 0.0;
double flag2 = 0.0;
int j = 0;
for (; j <= num[0]; j++) {
flag1 = flag1 + multiPros[j];
if (j == num[0]) {
break;
}
flag2 = flag2 + multiPros[j];
}
System.out.println("随机生成的数字所在的范围在:" + flag2 + "————" + flag1);
}
System.out.println("随机生成的数字为:" + num[1]);
}
}
/**
* 返回随机数所在概率累加的范围和随机数值
* @param probs
* @return
*/
public static double[] nextDisrete(double[] probs) {
double[] num = new double[4];
double r = Math.random() * 1;
double sum = 0.0;
for (int i = 0; i < probs.length; i++) {
sum += probs[i];
if (sum > r) {
num[0] = i;
num[1] = r;
return num;
}
}
num[0] = probs.length - 1;
return num;
}
}