为什么我的随机数不是那么随机?

时间:2010-11-11 13:34:31

标签: java random

int totalRecs = getTotalRecs(); // returns '13'
int MAX_RECS_PER_LOOKUP = 10;
Random rand = new Random();
int start = (totalRecs > Utl.MAX_RECS_PER_LOOKUP) ? rand.nextInt(totalRecs-Utl.MAX_RECS_PER_LOOKUP) : 0;
results = this.getNewRecs(filter, start, start+1);

我正在使用此随机数逻辑根据表格行偏移量(start最多start+1)从数据库中检索记录。

但出于某种原因,会不断重复相同的数字:start值为0,start值为3

我尝试播种Random对象,但没有区别:

long seed = System.currentTimeMillis();
rand.setSeed(seed);

3 个答案:

答案 0 :(得分:3)

rand.nextInt(n)方法返回0(包括)和n(不包括)之间的值。

在您的代码中,如果totalRecs为13,Utl.MAX_RECS_PER_LOOKUP为10(我假设此代码基于代码段中的MAX_RECS_PER_LOOKUP值,但我可能错了) ,那么这段代码:

rand.nextInt(totalRecs-Utl.MAX_RECS_PER_LOOKUP);

应返回0到2之间的随机数。

我不确定这是不是你真正想要的?

答案 1 :(得分:0)

确保您的输入有效。

通过调试比较

的值

totalRecs Utl.MAX_RECS_PER_LOOKUP&从同一次迭代开始。

您正在致电

rand.nextInt(totalRecs-Utl.MAX_RECS_PER_LOOKUP)

你应该“总是”获得0的唯一方法是,如果totalRecs = Utl.MAX_RECS_PER_LOOKUP 但是,如果差异仅为1,那么您将随机返回0或1。

答案 2 :(得分:-1)

您可以尝试java.security.SecureRandom

它似乎是一个很好的选择,它继承自java.util.Random