我有一个Java范围列表
public class Range {
private int min, max;
//constructor, getters, setters go here
}
因此,列表可能看起来像这样
ranges = [[3,9], [18,45], [90,112]]
我需要执行以下功能
public int getRandomValueWithinRanges() {
//returns a value which is contained inside a range inside the ranges ArrayList
}
我怎样才能做到这一点?在这些范围内的每个值都应具有被选择的同等概率,并且应该高效地完成(即,列出范围内所有值的列表,然后从该列表中随机选择是无效的)
最佳答案
好吧,一种方法:
对所有范围求和(即,它们跨越的整数总数)
从[0-total)
中选择一个随机值
将随机值视为索引,并逐步找到该索引对应的范围
根据包含所述索引的范围起点对随机数进行偏移。