【问题标题】:Is there a way to make a random number generator in java that is more likely to land on one number than another?有没有办法在java中制作一个随机数生成器,它更有可能落在一个数字上而不是另一个数字上?
【发布时间】:2021-07-25 18:47:50
【问题描述】:

我想在 java 中创建一个随机数生成器,它生成一个 1-20 的随机数,但我希望它更可能生成 1 而不是 20,比如较低的数字比较高的数字更有可能生成,有没有办法做到这一点?

【问题讨论】:

  • 举个例子——掷骰子是一个随机数。掷 2 个骰子也是随机的 - 但 7 比 12 更有可能。
  • 您在寻找连续分布还是离散分布?换句话说,是指定范围内的实数,还是指定范围内的整数?由于您没有指定任何特定的分布,一个简单的解决方案是生成一个模式接近零的triangular distribution。如果需要整数,请使用舍入、下限或上限。

标签: java random


【解决方案1】:

当然。这是一个简单的方法:

int data[] = {1,1,2,3,4,5,6,7,8,9,10};
return data[ThreadLocalRandom.current().nextInt(data.length)];

这将返回 1 2/11 的时间,以及 2-10 1/11 的时间。通过添加和删除元素来调整比例。

【讨论】:

  • 语法在此稍有偏差。 int[]{...}.
  • 是的,自从我每天使用该语言以来已经有一段时间了。谢谢。
  • @Eugene nextInt 的边界是排他的,如果我没记错的话。然后nextInt(data.length) 很好,没有-1
  • @Zabuzard 确实如此。
  • 顺便说一下,在 Java 9+ 中,您可以通过调用 List.of:List< Integer > data = List.of( 1,1,2,3,4,5,6,7,8,9,10 ) ; 来使用方便的文字语法来创建列表而不是数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2021-10-23
  • 2020-06-18
相关资源
最近更新 更多