android随机数问题

时间:2010-10-03 01:53:11

标签: android

尝试创建一个随机方法,该方法将查询数据库,获取数据库中的行数,然后获取1和总行数之间的随机数,以获取数据库中的特定项。它工作正常但不是很好,如果数据库中的条目少于十个,它将重复相同的条目大约十分之四。我想我需要一个更好的方法领先。

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

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

根据您的描述,您的数据库查询是基于1的。 Java nextInt是基于0的,即.nextInt(10)将生成0到9之间的随机数。因此,正确的解决方案是将第3行更改为

n = generator.nextInt((int) number) + 1;
然后,这将为您提供所需的信息。

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

答案 1 :(得分:2)

首先,我会尝试移动这条线:

Random generator = new Random();

到您的班级的构造函数或其他只会创建一次的地方。这肯定会有所帮助。

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