Java 如何在一定的时间间隔内完全随机生成数字

Java 如何在一定的时间间隔内完全随机生成数字,java,random,generator,Java,Random,Generator,我有一种生成方法,可以生成1到8之间的数字。但问题是,这种方法通常生成数字1-7,而几乎从不生成数字8。我的问题是,如何在一定的时间间隔内生成随机数,但所有数字出现的时间几乎相同 编辑: 我的号码发生器 public int generateNumber() { Random r = new Random(); return r.nextInt(8 - 1) + 1; } “几乎从来没有数字8”:如果发电机曾经产生8,那就是出了问题 nextInt给出了一个介于0和6(包括边

我有一种生成方法,可以生成1到8之间的数字。但问题是,这种方法通常生成数字1-7,而几乎从不生成数字8。我的问题是,如何在一定的时间间隔内生成随机数,但所有数字出现的时间几乎相同

编辑:

我的号码发生器

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

}
“几乎从来没有数字8”:如果发电机曾经产生8,那就是出了问题

nextInt给出了一个介于0和6(包括边框)之间的数字,加上1就得到了间隔[1,7]

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

r.nextInt(8) + 1

随机生成器生成一个“在0(包括)指定值(排除)之间均匀分布的int值”。请参阅文档:

你可以做:

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
 }
Random Random generator=new Random();

对于(intidx=1;idx您需要

return r.nextInt(8) + 1;
它将返回从1到8的值。因此它从0开始,并生成最大正常运行次数n-1,即根据的7


在您的例子中,您有
r.nextInt(8-1)
,它的计算结果为
r.nextInt(7)
,因此它将从0-6生成数字,并且在上面的api中将1添加到数字,因此您的范围是1-7,而不是1-8。

您对Java内置的随机生成器有问题吗,或者想自己修理?如果是后者,你需要展示你的发电机的外观。我的发电机和我的发电机都有问题。这是我的code@Traabefi:请查看我的更新答案。除了范围错误之外,您不应该调用
Random r=new Random()
反复调用。调用一次并重新使用它。您可能会发现每次调用它都会产生少于随机的结果。这就是它导致问题的原因。您的代码将返回0到8(包括)之间的整数。OP需要1到8(包括)之间的整数。