我有一个生成方法,可以生成1到8之间的数字。但问题是这种方法通常生成数字1-7,几乎从不生成数字8.我的问题是如何在一定的时间间隔内生成随机数但是所有数字大致相同?
编辑:
我的号码生成器
public int generateNumber() {
Random r = new Random();
return r.nextInt(8 - 1) + 1;
}
答案 0 :(得分: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
}
答案 1 :(得分:1)
&#34;几乎从不编号8&#34;:如果该生成器生成8,那就有问题了。
nextInt给出一个0到6之间的数字(包括边界),加一个给出间隔[1,7]。
要获得[1,8]中的数字,您可以使用
r.nextInt(8) + 1
答案 2 :(得分:0)
你需要像
这样的东西return r.nextInt(8) + 1;
这将返回1到8之间的值。所以从0开始生成数字max uptil n-1,即按this生成7。
在您的情况下,您的r.nextInt(8 - 1)
评估为r.nextInt(7)
,因此它会生成0 -6之间的数字,最重要的是,您将从api上方添加1到数字,因此您的范围是1-7而不是1-8。