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);
答案 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