请帮我根据用户输入%生成随机数 例如,输入为60,10和30时,输出应为:
60%的随机数0-70范围
10%的随机数为70-80
30%以上的随机数为80以上
我应该使用多量程发生器吗? 或者所有可能性是什么?
以下是代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
class RandomInRanges
{
private final List<Integer> range = new ArrayList();
RandomInRanges(int min, int max)
{
this.addRange(min, max);
}
final void addRange(int min, int max)
{
for(int i = min; i <= max; i++)
{
this.range.add(i);
}
}
int getRandom()
{
return this.range.get(new Random().nextInt(this.range.size()));
}
public static void main(String[] args)
{
RandomInRanges rir = new RandomInRanges(1, 200);
rir.addRange(50, 60);
System.out.println(rir.getRandom());
}
}
答案 0 :(得分:3)
一般方法可能如下:
使用您发布的示例,范围将是(0,.6),(。6,.7),(。7,1)。第一个映射将是从(0,.6)到(0,70):y = 70 * x / 0.6。第二个映射将是从(0.6,0.7)到(70,80):y = 70 + 100 *(x-0.6)。第三个映射需要知道您想要生成的最大数量。
以上工作适用于多个范围内的连续均匀分布。请注意,范围都是开放的(对于连续分布不是问题,因为精确命中边界点的概率为零,并且可以任意解决关系。如果要对整数值执行此操作,则可以使用采用相同的方法并对结果进行讨论。需要注意确保端点得到妥善处理,以避免引入偏差。
最后(希望很明显):这只有在所需的输出范围不相交时才有效。对于具有连续范围的离散分布(如示例所示),这将需要确定每个边界点落在哪个范围内。