2010-10-03 52 views
2

试图创建一个随机方法来查询数据库,获取数据库中的行数,然后抓取一个介于1和总行数之间的随机数来获取数据库中的特定项。它可以正常工作,但不是很好,如果数据库中少于10个条目,它会在大约4次中重复相同的条目。我想我需要一个更好的方法的领导。android随机数问题

number = mDbHelper.getCount(mDbHelper.mDb); 
Random generator = new Random(); 
n = generator.nextInt((int) number); 
if(n <= 1){ 
    n = 1; 
} 

任何想法?

回答

4

根据您的描述,您的数据库查询是1's为主。 Java的nextInt是0's为主,也就是说,.nextInt(10)会产生一个随机数介于0和9。所以,你的正确的解决办法是改变线3

n = generator.nextInt((int) number) + 1; 

那么这会给你你所需要的。

因为目前您正在将第[4]行中的[0]和[1]转换为1,所以您正在倾斜您的概率分布。你的第一个入口将被计算两次。如果您的database平均有5个条目,则会显示您看到的2/5 = 40%命中率。

2

首先,我会尝试移动线:

Random generator = new Random(); 

要在类的构造函数或者只会得到一次创建其他一些地方。这应该肯定有帮助。

除此之外,在这个问题的答案可能会帮助你: How good is java.util.Random?

+0

我在类的构造函数中有随机函数。我正在查看你的帖子的答案,那里有很多信息。 – Will 2010-10-03 18:49:23