开发者

android random number problem

开发者 https://www.devze.com 2023-01-19 00:01 出处:网络
Tried to create a random method that would query the database, obtain the number of rows in the database, and then grab a random number between 1 and the total numbe开发者_如何转开发r of rows to fetch

Tried to create a random method that would query the database, obtain the number of rows in the database, and then grab a random number between 1 and the total numbe开发者_如何转开发r of rows to fetch a specific item in the database. It works alright, but not great, if there are less than ten entries in the database it will repeat the same entry about 4 out of ten times. I think I need a lead on a better method.

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

Any ideas?


Based on your description, your database query is 1's-based. Java nextInt is 0's-based, that is, .nextInt(10) will generate a random number between 0 and 9. So your proper solution is to change line 3 to

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

this will then give you what you need.

Because at present you are converting both [0] and [1] into 1 in lines 4 & 5, you are skewing your probability distribution. Your first entry is going to get counted twice. If you have an average of 5 entries in your database, this would give you the 2/5 = 40% hit rate you're seeing.


First, I would try moving the line:

Random generator = new Random();

To your class's constructor or some other place where it will only get created once. That should definitely help.

Other than that, the answers to this question might help you out: How good is java.util.Random?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号