如何与概率例如30%
产生随机(1
到100
)整数,如果号范围从(1
到50
)随机产生整数,并用概率70%
如果号范围从( 50
至100
)?JAVA:与概率
int integer = new Random().nextInt(100) + 1;
// Probabilities
..... code here ....
我该怎么做?
如何与概率例如30%
产生随机(1
到100
)整数,如果号范围从(1
到50
)随机产生整数,并用概率70%
如果号范围从( 50
至100
)?JAVA:与概率
int integer = new Random().nextInt(100) + 1;
// Probabilities
..... code here ....
我该怎么做?
这是一个方法getRandom()
它返回一个符合您指定的标准的随机数。它实际上使用0
和9
之间的一个随机数来确定使用哪个范围。
public int getRandom() {
Random random = new Random();
int val = random.nextInt(10);
if (val < 3) {
return random.nextInt(50) + 1; // random range 1 to 50
}
else {
return random.nextInt(51) + 50; // random range 50 to 100
}
}
这是一个通用的解决方案,将返回任意数量的事件之一,您可以在其中指定事件的相对权重。权重可能是概率,但他们不必;例如,如果您有三个事件,并且您希望第一个事件的可能性为20%,第二个30%和第三个50%,则可以在每个事件上调用addEvent
以2,3和5作为第二参数,或者20,30和50或者0.2,0.3和0.5,或者具有那些比率的任何其他数字组合。对于你的情况,你可以使通用参数为间隔并添加两个权重为3和7(或30和70,或其他)的事件;那么,当你打电话randomEvent
,并返回与端点m
和n
包容的间隔,那么你在生成该区间另一个随机数:
value = m + random.nextInt(n - m + 1);
其中random
是你自己的Random
实例。
class RandomDistribution<T> {
private class Event {
public final T event;
public final double relativeWeight;
public Event(T event, double relativeWeight) {
this.event = event;
this.relativeWeight = relativeWeight;
}
}
private double totalWeight = 0D;
private ArrayList<Event> events = new ArrayList<>();
private Random generator = new Random();
public void addEvent(T event, double relativeWeight) {
events.add(new Event(event, relativeWeight));
totalWeight += relativeWeight;
}
public T randomEvent() {
double random = generator.nextDouble() * totalWeight;
for (Event event : events) {
random -= event.relativeWeight;
if (random < 0D) {
return event.event;
}
}
// It's possible to get here due to rounding errors
return events.get(events.size() - 1).event;
}
}
重复https://stackoverflow.com/questions/20327958/random-number-with-probabilitieshttps://stackoverflow.com/questions/20327958/random-number-with-probabilities编辑:嗯这是奇怪的。 。如果你直接点击链接,它会提供一个404,但它可以通过谷歌https://www.google.com/search?q=questions%2F20327958%2Frandom-number-with-probabilities&oq=questions%2F20327958%2Frandom-number- with-probabilities&aqs = chrome..69i57j69i58j69i60.5166j0j8&sourceid = chrome&es_sm = 91&ie = UTF-8 –
@MichaelJames正确的链接是https://stackoverflow.com/questions/20327958/random-number-with-probabilities – Andreas
这是一个中文网站[用概率随机生成整数](http://www.360doc.com/content/10/1208/14/2960485_76121195.shtml) –