如何在一定区间内纯随机生成数字

How to make purely random generation of numbers in certain interval

我有一个生成1到8之间的数字的生成方法。但问题是这个方法经常生成1-7的数字而几乎从不生成8。我的问题是如何在一定区间内生成随机数但所有数字出现的次数大致相同?

编辑:

我的号码生成器

public int generateNumber() {
    Random r = new Random();
    return r.nextInt(8 - 1) + 1;

}

"almost never number 8":如果那个生成器曾经生成 8,那就有问题了。

nextInt 给出 0 到 6(包括边界)之间的数字,加一给出区间 [1,7]。

要获取 [1,8] 中的数字,您可以使用

r.nextInt(8) + 1

随机生成器生成一个"uniformly distributed int value between 0 (inclusive) and the specified value (exclusive)"请参考文档:

http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

你可以这样做:

random.nextInt(max - min + 1) + min

而且应该没问题。

或者,

Random randomGenerator = new Random();
for (int idx = 1; idx <= NUMBER_OF_INTEGERS_YOU_WANT; idx++){
  int randomInt = randomGenerator.nextInt(8)+1; 
  CODE_HERE
 }

你需要这样的东西

return r.nextInt(8) + 1;

return 值从 1 到 8。所以它从 0 开始,生成的数字最大 uptil n-1,即根据 this.

的 7

在你的例子中,你有 r.nextInt(8 - 1),它的计算结果为 r.nextInt(7),所以它会生成 0 -6 的数字,最重要的是你要将 1 加到上面的数字 api,所以你的范围是 1-7 而不是 1-8。