gpt4 book ai didi

java - 是否有带有权重的随机 nextInt ?

转载 作者:行者123 更新时间:2023-12-01 18:15:55 26 4
gpt4 key购买 nike

我正在使用 random 类生成 1 到 5 之间的随机数,如 myrandom.nextInt(6),它工作正常,但我想知道是否有一种方法可以给特定数字赋予权重以增加它出现的概率,假设我希望数字“4”有 %40 的概率,而不是 %20 的概率,而其他数字 1,2,3,5 平均分享其余 %60 的概率。有办法吗?

提前致谢。

最佳答案

我使用数组。例如

int[] arr = {4, 4, 4, 5, 5, 6};
int a = arr[random.nextInt(arr.length)];

要获得更动态的解决方案,请尝试此操作。权重之和不必达到任何特定值。

public static <T> T choice(Map<? extends T, Double> map) {
if (map == null || map.size() == 0)
throw new IllegalArgumentException();
double sum = 0;
for (double w : map.values()) {
if (Double.compare(w, 0) <= 0 || Double.isInfinite(w) || Double.isNaN(w))
throw new IllegalArgumentException();
sum += w;
}
double rand = sum * Math.random();
sum = 0;
T t = null;
for (Map.Entry<? extends T, Double> entry : map.entrySet()) {
t = entry.getKey();
if ((sum += entry.getValue()) >= rand)
return t;
}
return t;
}

您可以随时轻松地在 map 中添加/删除/更改条目。以下是如何使用此方法的示例。

Map<Integer, Double> map = new HashMap<>();
map.put(1, 40.0);
map.put(2, 50.0);
map.put(3, 10.0);
for (int i = 0; i < 10; i++)
System.out.println(choice(map));

关于java - 是否有带有权重的随机 nextInt ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29583547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com