2010-11-11 97 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只。

相關問題