2010-11-11 116 views
2
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

什么是Utl.MAX_RECS_PER_LOOKUP?可能问题不是rand.nextInt,而是您的输入将它限制为可能整数的一小部分。 – 2010-11-11 13:39:35

+2

发生了一些非常奇怪的事情。如果totalRecs真的是13,那么你不应该得到3(因为你传递3 nextInt,这是唯一的上限)。你可以尝试打印totalRecs的值并检查它是你的想法吗?为什么您使用Utl.MAX_RECS_PER_LOOKUP而不是您刚刚设置的MAX)RECS_PER_LOOKUP? – 2010-11-11 13:39:42

回答

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

你可以尝试java.security.SecureRandom中

这似乎是一个很好的选择,它从java.util.Random的

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只。

相关问题