Tu *_*Bui 1 java arrays random non-uniform-distribution probability-density
我想编写Java代码来生成范围[1,4]中的随机整数数组.数组的长度为N,在运行时提供.问题是范围[1,4]不均匀分布:
这意味着如果我创建N = 100的数组,数字'1'将在数组中平均出现40次,数字'2'出现10次,依此类推.
现在我使用此代码生成范围[1,4]中的均匀分布的随机数:
public static void main(String[] args)
{
int N;
System.out.println();
System.out.print("Enter an integer number: ");
N = input.nextInt();
int[] a = new int[N];
Random generator = new Random();
for(int i = 0; i < a.length; i++)
{
a[i] = generator.nextInt(4)+1;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用非均匀分布实现它,如上图所示?
从代码开始,这是一种方法:
public static void main(String[] args){
int N;
System.out.println();
System.out.print("Enter an integer number: ");
N = input.nextInt();
int[] a = new int[N];
Random generator = new Random();
for (int i = 0; i < a.length; i++) {
float n = generator.nextFloat();
if (n <= 0.4) {
a[i] = 1;
} else if (n <= 0.7) {
a[i] = 3;
} else if (n <= 0.9) {
a[i] = 4;
} else {
a[i] = 2;
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:在@pjs的建议下,按照破解概率的顺序选择数字,这样你就可以提前退出if块