尝试创建一个随机方法,该方法将查询数据库,获取数据库中的行数,然后获取1和总行数之间的随机数,以获取数据库中的特定项。它工作正常但不是很好,如果数据库中的条目少于十个,它将重复相同的条目大约十分之四。我想我需要一个更好的方法领先。
number = mDbHelper.getCount(mDbHelper.mDb);
Random generator = new Random();
n = generator.nextInt((int) number);
if(n <= 1){
n = 1;
}
有什么想法吗?
答案 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?