【发布时间】:2021-01-23 13:48:50
【问题描述】:
我可以在不使用外部库的情况下在 java 中执行以下操作吗?也许使用 if-else 语句? 谢谢
import random
print(random.choices(['A', 'B', 'C'], [0.5, 0.3, 0.2]))
【问题讨论】:
我可以在不使用外部库的情况下在 java 中执行以下操作吗?也许使用 if-else 语句? 谢谢
import random
print(random.choices(['A', 'B', 'C'], [0.5, 0.3, 0.2]))
【问题讨论】:
当然。所需工具有:
java.util.Random 的一个实例
nextDouble方法。算法类似于:
[0.5, 0.8, 1.0]。nextDouble 的输出乘以最终权重(此处最终权重为 1.0,因此不需要。当然,乘以 1.0 也无妨)。例子:
public class WeightedList {
private final char[] choices;
private final double[] weights;
private final Random rnd = new Random();
public WeightedList(char[] choices, double[] weights) {
if (choices.length != weights.length) throw new IllegalArgumentException();
this.choices = Arrays.copyOf(choices);
this.weights = new double[weights.length];
double s = 0.0;
for (int i = 0; i < weights.length; i++) {
this.weights[i] = (s += weights[i]);
}
}
public char get() {
double v = rnd.nextDouble() * weights[weights.length - 1];
for (int i = 0; i < weights.length - 1; i++) {
if (v < weights[i]) return choices[i];
}
return weights[weights.length - 1];
}
}
【讨论】:
get() 方法)更漂亮了一点。