Java:对 Random() 应用概率约束

Java: Applying probability constraints on Random()

我从来没有特别精通 Java 随机函数。

我正在使用

int myrandom = ThreadLocalRandom.current().nextInt(x, y+1)

其中 myrandom 的值将在变量 x 和 y 之间计算。

它本身的值并不完全相关,我可能会将其设置为 0 和 1000,然后 运行 一个算法来解释该值。

        for(int i = 0; i < 4; i++){

            if( randmods[i].gtr_less(choice) ){
                choice = i;
                break;

            }else{
                continue;

            }
        }

其中的函数很简单:

public boolean gtr_less(int value){

    if(value > mod_min && value < mod_max){
        return true;

    }else{

        return false;
    }

}

基本方法是使用if(rand > x && rand < y)

评估所有可能性

问题是,我想将我放置在每个范围内的修饰符限制在 0-1000 之间。

所以如果是 10 个案例,它们是:

Z>0 && Z<100, Z>100 && Z<200, Z>200 && Z<300...

...等等,我想改变约束说,Z>0 && Z<110, Z>110 Z<210.

如您所见,并且可能猜到,以这种方式处理数据非常痛苦,我确信一定有更好的方法来做到这一点,可能是使用模数。

主要问题是当我只想更改一个时,我必须修改/所有/的案例。当我必须将默认值恢复为一个而不是其他默认值时,事情变得相当复杂。

我的数学能力不是那么好,所以感谢任何帮助。

这是一种方法。

  1. 确定 bin 的大小以实现所需的分布。
  2. 确定所有bin的大小的总和,称其为n
  3. 分配一个int[] slots = new int[n];
  4. 预填充数组,使每个槽都包含 bin 编号
  5. 生成一个介于0和n-1之间的随机数,称为x
  6. slots[x]
  7. 读取bin号