【问题标题】:Choosing random value from weighted options in java [duplicate]从java中的加权选项中选择随机值[重复]
【发布时间】:2022-01-19 18:25:08
【问题描述】:

当用户点击时,必须从一组输出中选择一个随机输出。一个值的机会需要高于另一个值。例如,您单击一个按钮,您将收到BronzeSilverGoldPlatinum。显然,如果你随机点击,你应该会收到比白银多、比黄金多、比白金多的青铜。例如,它可能看起来像这样:

printRandom("Bronze", 30, "Silver", 20, "Gold", 10, "Platinum", 5, "You didn't get anything.");

最终的结果是当你不幸一无所获时。我一直无法让一个选项比另一个更常见,而不是一开始就选择一个值。谢谢。

【问题讨论】:

  • Apache Commons RNG 库为此提供了类。
  • 30是重量还是百分比?如果它是一个重量,那么“你什么都没得到”就失去了它的重量。否则,我们是否假设它是 35%?
  • 我只是把数字表示一个选项的可能性有多大。由于 30 比 20 多,所以会多选 30。

标签: java random


【解决方案1】:

如果您想保持简单,可以执行以下操作:

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%。我认为这不是本意。
  • 不,不是。我想我可以通过设置一个字符串值而不是返回它来解决这个问题,这样就有机会覆盖铂金/黄金等。
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2011-05-26
  • 2015-07-05
  • 2010-09-08
相关资源
最近更新 更多