生成具有非均匀分布的随机整数数组

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)

如何使用非均匀分布实现它,如上图所示?

Miq*_*uel 9

从代码开始,这是一种方法:

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块