在Java中从加权选项中选择随机值

3
当用户点击时,必须从一组输出中选择一个随机输出。其中一个值的概率需要比另一个值高。例如,您点击一个按钮,要么获得 Bronze Silver Gold Platinum 。显然,如果您随机点击,则应收到Bronze的概率大于Silver,大于Gold,大于Platinum。例如,它可能看起来像这样:
printRandom("Bronze", 30, "Silver", 20, "Gold", 10, "Platinum", 5, "You didn't get anything.");

当你不够幸运得不到任何一个选项时,最终的结果就是这样。我在强制某个选项比另一个更常见方面遇到了麻烦,而且一开始并没有选择值。谢谢。


Apache Commons RNG库有相应的类可供使用。 - Shawn
30是重量还是百分比?如果它表示重量,那么“You didn't get anything”缺少重量信息。否则,我们可以假设它是35%吗? - candied_orange
我只是用数字来表示一个选项的可能性。因为30比20更大,所以30会被选择得更多。 - CiY3
1个回答

0
如果你想保持简单,你可以这样做:
int random = Math.random();

if (random < 0.05) { // 5/100
  return "Platinum";
} else if (random < 0.1) { // 10/100
  return "Gold";
} else if (random < 0.2) { // 20/100
  return "Silver";
} else if (random < 0.3) { // 30/100
  return "Bronze";
} else {
  return "You didn't get anything.";
} 

早期收益会削弱后期收益的可能性。您将获得白金5%,黄金5%,银10%,青铜10%。我不认为这是预期的结果。 - candied_orange
不,其实并不是。我认为可以通过设置字符串值来修复这个问题,而不是返回它,这样就有机会覆盖白金/黄金等。 - CiY3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接