2015-01-01 60 views
-1

我有一个生成方法,可以生成1到8之间的数字。但问题是这个方法经常会生成数字1-7,几乎没有数字8.我的问题是如何在一定的时间间隔内生成随机数字,但是所有数字大致是同一时间?如何在一定的时间间隔内纯粹随机生成数字

编辑:

我数发生器

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

} 
+1

您是否遇到Java内置随机生成器的问题,或者希望修复自己的问题?如果是后者,则需要显示发电机的外观。 –

+0

代码在哪里? – SMA

+0

我有问题与一般发电机和我的。这里是我的代码 – Traabefi

回答

2

随机发生器 “0(含)规定值(不包括)之间均匀分布int值” 产生一个数字请参考文档:

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 
} 
+0

您的代码将返回0到8之间的整数(含)。 OP希望在1到8(含)之间。 –

+0

良好的通话。我会做出更正。 – Jobs

+1

完成。 @MichaelPetch – Jobs

1

“几乎从来没有8号”:如果发电机产生过8有什么不​​对。

nextInt给出一个介于0和6之间的数字(包含边界),并加上一个给出区间[1,7]。

要获得在[1,8]可以使用

r.nextInt(8) + 1 
+0

这就是它导致问题的原因。 – Traabefi

0

你需要像

return r.nextInt(8) + 1; 

将从1返回值8。因此,它从0开始,并产生数最多uptil N-1即7按this

在你的情况下,你有r.nextInt(8 - 1)其计算结果为r.nextInt(7),所以它会产生0-6的数字,并且最重要的是你要从api上面加1,所以你的范围是1-7而不是1- 8。

相关问题