Random rng = new Random(); int cardValue = rng.nextInt(10) + 2;
在java中,如何分配更高的概率从这段代码中提取数字10?
hfwmuf9z1#
这可能不会满足你所有的限制,但它应该让你朝着正确的方向前进。。。
int percent = Random.nextInt(100); if (percent < 21) { percent = 10;// 21% of the time } else { percent = percent % 10;// the rest of the time } return percent;
h9vpoimq2#
很多方法! Random.nextInt(10) 返回包含范围[0,9]中的值。所以呢 Random.nextInt(10)+2 是[2,11]。一种绝对武断的方式是:
Random.nextInt(10)
Random.nextInt(10)+2
Random rng = new Random(); int cardValue = rng.nextInt(11) + 2; if(cardValue==12){ cardValue=10; }
这将给10一个概率,是其他值的1/5倍。如果你只想在价值上有优势,你可以把更多的价值“Map”到10。另一种(快速的)方法是建立一个具有重复值的数组,该值为您提供所需的概率。这相当于从洗牌牌组中抽取(在本例中)10比其他数字在更多的牌上。这是替换!如果您想进一步模拟图形而不进行替换,您可以通过将最后一个元素复制到拾取的元素并缩小每个图形的范围来实现。附言:这可能是样本代码,但我不会分配一个新的 Random 每次通话。它提供了(如果有的话)较少的分销保证。您将(至少在单元测试中)希望强制种子使序列具有可复制性—即使您希望在应用程序中每次都不同。
Random
2条答案
按热度按时间hfwmuf9z1#
这可能不会满足你所有的限制,但它应该让你朝着正确的方向前进。。。
h9vpoimq2#
很多方法!
Random.nextInt(10)
返回包含范围[0,9]中的值。所以呢Random.nextInt(10)+2
是[2,11]。一种绝对武断的方式是:
这将给10一个概率,是其他值的1/5倍。
如果你只想在价值上有优势,你可以把更多的价值“Map”到10。
另一种(快速的)方法是建立一个具有重复值的数组,该值为您提供所需的概率。这相当于从洗牌牌组中抽取(在本例中)10比其他数字在更多的牌上。这是替换!
如果您想进一步模拟图形而不进行替换,您可以通过将最后一个元素复制到拾取的元素并缩小每个图形的范围来实现。
附言:这可能是样本代码,但我不会分配一个新的
Random
每次通话。它提供了(如果有的话)较少的分销保证。您将(至少在单元测试中)希望强制种子使序列具有可复制性—即使您希望在应用程序中每次都不同。